为什么 URL 在我创建路线时会发生变化?

Why does the URL change when I create a route?

我有一个 ASP.NET MVC5 项目,在视图中,我有一个像这样的 link...

<a href="@Url.Action("Partner", "Home", new {id = Model.PartnerID})">
  ...loads of markup here...
</a>

这很好用,给我一个 URL 形式的 /Home/Partner/100

但是,如果我为操作添加一条路线...

routes.MapRoute("Partner", "Partner", new { controller = "Home", action = "Partner" });

...然后 URL 呈现为 /Partner?id=100

有没有办法得到 /Partner/100 形式的 URL?

您可以像下面这样创建您想要的地图路线。

routes.MapRoute(
        name: "Partner", 
        url: "{controller}/{action}/{id}", 
        defaults: new { controller = "Home", action = "Partner", id = UrlParameter.Optional }  
 );

您的路线定义需要包含 id 的路段。

routes.MapRoute(
    name: "Partner",
    url: "Partner/{id}",
    defaults: { controller = "Home", action = "Partner" }
);

您可以将条目放在 Global.asax.cs 中,如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


    routes.MapRoute(
        name: "customroute1",
        url: "{controller}/{action}/{id}",
        defaults: new
        {
            controller = "Home",
            action = "partner",
            id = UrlParameter.Optional
        }
    );



routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { 
        controller = "Home", 
        action = "Index", 
        id = UrlParameter.Optional }
);

}

注意:您在 global.ascx 文件中放置代码的顺序非常重要。

Additional Official Info:

当您创建新的 ASP.NET MVC 应用程序时,该应用程序已配置为使用 ASP.NET 路由。 ASP.NET 路由设置在两个地方。 首先,在应用程序的 Web 配置文件(Web.config 文件)中启用 ASP.NET 路由。

配置文件中有四个部分与路由相关:system.web.httpModules部分、system.web.httpHandlers部分、system.webserver.modules部分和system.webserver.handlers部分部分。小心不要删除这些部分,因为没有这些部分路由将不再有效。

其次,更重要的是,在应用程序的 Global.asax 文件中创建了一个路由 table。 Global.asax 文件是一个特殊文件,其中包含 ASP.NET 应用程序生命周期事件的事件处理程序。路由 table 是在应用程序启动事件期间创建的。