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

问题描述 投票:2回答:2

我正在阅读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/Fooworks就好了。

c# asp.net-mvc
2个回答
2
投票

你不能从http://localhost/Contact/Foo以外的控制器处理对ContactController的请求,除非你从基本控制器以外的东西继承ContactController并做一些实现工作来使这种类型的Url重写发生。您引用的摘录只允许您将参数作为Url段传递,而无需明确指定Url模板中的所有参数。


1
投票

我在读这本书时遇到过这个问题

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

© www.soinside.com 2019 - 2024. All rights reserved.