为什么路径信息路由在 MVC 示例中不起作用 ASP.NET
本文关键字:不起作用 ASP NET MVC 路径 信息 路由 为什么 | 更新日期: 2023-09-27 18:34:50
我正在阅读《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 未找到。 具体而言,作者指出:
。将 {*路径信息} 添加到模式中...允许任意数量的附加 网址参数...现在,当您输入 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
工作正常。
处理来自ContactController
以外的控制器的http://localhost/Contact/Foo
请求,除非您从基本控制器以外的其他内容继承ContactController
并执行一些实现工作来实现这种 Url 重写。您所引用的摘录仅允许您将参数作为 Url 段传递,而无需显式指定 Url 模板中的所有参数。
我在阅读这本书时遇到了这个问题
Pro C# 7:With .NET and .NET Core 8th Edition,作者:Andrew Troelsen 和 Phil Japiks。
"Add a new route"
写道:
routes.MapRoute("Contact", "Contact/{*pathinfo}", new { controller = "Home", action = "Contact" });
添加新路由后,您需要打开测试 URL:
http://localhost:60466/Home/Contact/Foo/Bar
但是有一个错误,你需要打开上面的URL,没有
家
像这样http://localhost:60466/Contact/Foo/Bar