我的MVC web应用程序生成一个可以包含任何字符(%,+,/等)的激活链接。我对字符串进行URL编码并生成链接:
new UrlHelper(HttpContext.Current.Request.RequestContext)
.RouteUrl("AccountActivation",
new { id = HttpContext.Current.Server.UrlEncode(activationString) };
然后添加域名,看起来像这样:
http://localhost/AccountActivation/asdlkj223%25asd%2Basw3fgasdme
然后将URL传递给用户。
这种情况下的路由是:
routes.MapRoute(
"ActivateAccount",
"AccountActivation/{id}",
new { controller = "Account", action = "Activate", id = ""});
对我来说似乎没问题,但ASP.NET开发服务器和IIS给出了HTTP错误400-错误请求。这意味着有一个与URL相关的问题,我看不到。
当路由描述中去掉{id}(我也尝试过{*id}没有成功)时:
routes.MapRoute(
"ActivateAccount",
"AccountActivation",
new { controller = "Account", action = "Activate"});
这些URL看起来像:
http://AccountActivation?id=asdlkj223%25asd%2Basw3fgasdme
它们都可以很好地工作...
我认为这2种方法完全一样。它们之间有什么区别?是MVC引擎为我执行了更多的操作,还是我在URL编码方面遗漏了什么。