【发布时间】:2011-11-11 06:10:43
【问题描述】:
我有一个编码问题,我似乎无法处理有关路线上的参数的问题。基本上,它要么 从不 URL 编码,要么 double URL 编码。我只想要单编码!
这是我注册的路线:
routes.MapRoute("Scan", "Scan/{*url}", new { controller = "Scan", action = "Index" });
现在我有一个重定向到该路由的控制器操作。为简单起见,假设它看起来像这样:
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 中讨论了更多信息、评论和解决方法。
【问题讨论】:
标签: c# model-view-controller encoding routing