我正在阅读C#6.0和.NET 4.6 Framework这本书,我正在查看自定义路由示例routes.MapRoute("Contact", "Contact/{*pathinfo}", new { controller = "Home", action = "Contact" });
。作者说,这应该允许我放入网址http://localhost:64173/Home/Contact/Foo/Bar
并仍然被定向到联系页面,因为增加了*pathinfo
。但是,它只是给我一个404 Not Found。具体而言,作者说:
...将{* pathinfo}添加到模式中...允许任意数量的其他URL参数...现在,当您输入URL
http://localhost:64173/Home/Contact/Foo/Bar
时,它仍然显示联系页面。
但我仍然得到404错误。我注意到http://localhost:64173/Home/Contact/Foo
以及http://localhost:64173/Contact/Foo/parm1/parm2/parm3
。所有这些都重定向回联系页面。以下是完整路由的样子:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Contact", "Contact/{*pathinfo}", new { controller = "Home", action = "Contact" });
routes.MapRoute("About", "About/{*pathinfo}", new { controller = "Home", action = "About" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
谢谢,我知道这可能是显而易见的,但我不知道作者是否犯了错误,或者我在路线上遗漏了什么。
注1:我也试过* pathInfo(“I”大写)。这也不起作用。
注2:导航到http://localhost:64173/Home/Contact/Foo
works就好了。
你不能从http://localhost/Contact/Foo
以外的控制器处理对ContactController
的请求,除非你从基本控制器以外的东西继承ContactController
并做一些实现工作来使这种类型的Url重写发生。您引用的摘录只允许您将参数作为Url段传递,而无需明确指定Url模板中的所有参数。
我在读这本书时遇到过这个问题
Pro C#7:由Andrew Troelsen和Phil Japiks撰写的.NET和.NET Core第8版。
有写"Add a new route"
:
routes.MapRoute("Contact", "Contact/{*pathinfo}", new { controller = "Home", action = "Contact" });
添加新路线后,您需要打开测试网址:
http://localhost:60466/Home/Contact/Foo/Bar
但是有一个错误,你需要打开上面的URL,没有
家
像这样http://localhost:60466/Contact/Foo/Bar