为什么路径信息路由在 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/Foohttp://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工作正常。

为什么路径信息路由在 MVC 示例中不起作用 ASP.NET

您无法

处理来自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