【发布时间】:2013-08-10 10:07:50
【问题描述】:
背景
在HomeController.cs 我有:
[HttpGet]
public GetPerson(string name)
{
return View(new PersonModel { ... });
}
在Global.asax.cs 我有:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Word", "person/{name}",
new { controller = "Home", action = "GetPerson" });
routes.MapRoute(
"Default", "{controller}/{action}",
new { controller = "Home", action = "Index" });
}
在SomePage.cshtml 中,我实际上有这个:
@{ var name = "Winston S. Churchill"; }
<a href="@Url.Action("GetPerson", "Home", new { name })">@name</a>
问题
如果我点击 Winston S. Churchill 的链接,我会被路由到 URL http://localhost/person/Winston%20S.%20Churchill,这会产生标准的 404 页面:
HTTP 错误 404.0 - 未找到
您要查找的资源已被删除、更改名称或暂时不可用。
仅当 name 变量包含 .(句点)时才会发生这种情况。 例如,当名称为 Winston Churchill 时,我的所有代码都可以正常工作。
如何使 ASP.NET MVC 3% 对 URL 中的 .(句点)进行编码?
或者,如果没有对.(句点)进行百分比编码,如何使路由正常工作?
不可接受的解决方法(如果没有说明理由)
如果我将路线更改为以下,一切正常。
routes.MapRoute(
"Word", "person",
new { controller = "Home", action = "GetPerson" });
但是,URL 变成了http://localhost/person?name=Winston%20S.%20Churchill,这不是我想要的。我想要 URL 的路径部分中的 name,而不是查询。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-routing