【发布时间】:2012-02-06 03:36:00
【问题描述】:
我的 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"});
网址如下所示:
http://AccountActivation?id=asdlkj223%25asd%2Basw3fgasdme
它们工作得很好......
尽管这两种方法做的事情完全相同。它们之间有什么区别?是 MVC 引擎为我执行了更多操作,还是我错过了 URL 编码的某些内容。
【问题讨论】:
-
您的激活操作是什么样的?日志中是否有任何异常可以提供有关基础错误的更多信息?
标签: asp.net-mvc asp.net-mvc-3 urlencode