- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个编码问题,我似乎无法掌握有关路线参数的问题。基本上,它要么从不 URL 编码,要么加倍 URL 编码。我只想对它进行单一编码!
这是我注册的路线:
routes.MapRoute("Scan", "Scan/{*url}", new { controller = "Scan", action = "Index" });
现在我有一个重定向到该路由的 Controller 操作。为了简单起见,假设它看起来像这样:
var url = "troyhunt.com/search";
return RedirectToRoute("Scan", new { url });
生成的 URL 是“Scan/troyhunt.com/search”——请注意,.com 之后的正斜杠没有被转义。
现在让我们再试一次,但应用 URL 编码:
var url = HttpUtility.UrlEncode("troyhunt.com/search");
return RedirectToRoute("Scan", new { url });
这次生成的 URL 是“Scan/troyhunt.com%252fsearch”——请注意正斜杠已经过双重编码。如果我在重定向之前设置断点,我可以看到 UrlEncode 方法成功地将正斜杠编码为 %2f。
看起来重定向编码的是“%”符号而不是“/”。如果我使用通常使用 URL 编码 (?,=) 转义的其他字符进行测试,则编码可以直接从 RedirectToRoute 方法正常工作。这可能是将斜杠视为分隔路线段因此不转义的问题吗?我在这里还漏掉了什么吗?
更新:To route or not to route, that is the question 中讨论了更多信息、评论和解决方法.
最佳答案
查看 System.Web.Routing 看起来这是因为路由值不是使用 HttpUtility.UrlEncode(value)
进行 URL 编码但实际上是使用“转义” Uri.EscapeUriString(value)
。
违规代码在 System.Web.Routing.ParsedRoute
中:
// Dev10 601636 Work around Uri.EscapeUriString not encoding #,&
private static string UrlEncode(string str) {
string escape = Uri.EscapeUriString(str);
return Regex.Replace(escape, "([#;?:@&=+$,])", new MatchEvaluator(EscapeReservedCharacters));
}
这 可能是 设计决定(必须向 Microsoft 人员询问),因为正斜杠是路由中不可或缺的一部分。如果是,我觉得它有点奇怪,因为 documentation for Uri.EscapeUriString()
指出它的主要用途是:
Use the EscapeUriString method to prepare an unescaped URI string to be a parameter to the Uri constructor.
按照生成路由 URL 的代码,它似乎根本没有使用 Uri
类 - URL 是在字符串中构造和返回的。
如果您将它作为查询字符串参数传递,而不是作为指定路由的一部分,它将被正确地进行 URL 编码(但当然会改变您的 URL 的结构)。
关于c# - RedirectToRoute 在参数中对 "/"进行双重编码,这些参数是 routeValues 中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7319105/
我将 2 个可为 null 的参数传递给 Products 操作。但是,我不得不在 mallId 中传递一些值,否则我会收到 no route table matches found 错误。我想在 m
public ActionResult Logout() { FormsAuthentication.SignOut(); return RedirectToRoute("Home")
我的 Global.asax.cs 中有这个: routes.MapRoute("BetaAccess", "beta-access", new { controller = "Beta", acti
我正在开发一个带有 Model View Controller 结构的 Razor 应用程序,我尝试编辑一些东西然后使用重定向路由返回到索引页面,但我也尝试传递错误,作为一个列表字符串。 我有这样的东
在我的网页 1 Controller 中,我想重定向到网页 2,传递 2 个变量。 我尝试使用 RedirectToRoute,但无法正常工作;显示错误的 URL。然后我改用 RedirectToAc
我有一个常规的 webforms 项目(非 MVC),我成功地实现了 MapPageRoute 和 RedirectToRoute 场景。页面路由是通过数据库查找完成的,因为我正在翻译查询字符串(例如
给定这些路线: routes.MapRoute("Test", "test", new { controller = "Test", action = "Index" }); routes.MapRo
我已经上下搜索了我认为是常见问题的答案,但未能找到解决方案...所以问题是: 我有以下模型: public class UserModel { public string us
我正在使用 HttpResponseBase 对象测试 AspNet MVC 应用程序中的 HttpModule,正如 Kazi Rashid's blog 所建议的那样 在我的测试代码中我有: co
我需要从 symfony2 访问 twig 中的一个实体。在 Controller 内部,我可以做一些事情: return $this->render('frontendBundle::carrode
我正在使用新的路由功能编写一个 asp.net 4.5 应用程序。我有一个页面显示有关项目的一些信息。在 Page_Load事件我检查路线数据(项目 ID)和用户权限,如果有问题(例如 ID 用于删除
我希望重定向到某个路线,但也指定要在该路线的 Controller 上运行的操作。 我尝试过这个: Response.RedirectToRoute("Login", new { action = "
所以我有我的域 - www.mycatchyname.com,它基本上是一个有一个目的的单页站点,所以我在根 Controller /操作上使用 RedirectToRoute 直接转到 www.my
我有一个 symfony2 Controller ,我想在其中执行以下操作: try { return $this->redirect($request->headers->get('refe
我不知道哪里出了问题,这应该很简单。 我有这个功能: /** * * @Route("/fin/carteira/list", name="carteira_list") */ public f
我只是对为什么我的 RedirectToRoute() 方法不起作用感到困惑。我有一个这样的 RouteConfig.cs 文件 routes.MapRoute( "pattern1",
我有一个编码问题,我似乎无法掌握有关路线参数的问题。基本上,它要么从不 URL 编码,要么加倍 URL 编码。我只想对它进行单一编码! 这是我注册的路线: routes.MapRoute("Scan"
我正在尝试执行从一个 Controller 到另一个 Controller 的重定向,同时传递一些参数。不幸的是,参数的值在 GET 查询字符串中看起来很长且令人讨厌。无论如何我可以在重定向上使用 P
我正在尝试设置一个BaseController来处理文化作为url的一部分(基于ASP.NET MVC 5 Internationalization)。只要禁用我的区域注册,我的实现工作就可以正常进行
我使用 RedirectToRoute 方法来强制 url 中的区域性。一切正常,直到我在项目中创建管理区域。现在该方法重定向到区域 Controller 。 主 HomeController 示例:
我是一名优秀的程序员,十分优秀!