定义多个路由时,如何将路由设为默认路由?

时间:2016-05-14 11:10:40

标签: asp.net-mvc routing

我有一个mvc网站,其中指定了默认路由。

我的应用程序中有一个URL定义为:

http://localhost:3729/Information?Cust_ID=1&Cust_IMAGE_ID=2

我不是按照上面的格式显示我的网址,而是采用上面的格式,但是如下所示:

http://localhost:3729/Information/1/2

所以我定义了一条路线:

routes.MapRoute(
    name: "Information",
    url: "{controller}/{action}/{Cust_ID}/{Cust_IMAGE_ID}",
   defaults: new { controller = "Information", action = "Index", Cust_ID = UrlParameter.Optional, Cust_IMAGE_ID = UrlParameter.Optional
});

并将其添加到现有的routeconfig.cs。

这条路线在路线表中排名第二。

当我运行应用程序并访问该页面时,我没有得到我希望的格式。

当我把这条路线放在第一条路线时,我得到了我想要的功能,但是应用程序直接打开了这个页面而不是主页。

如何实现我想要的功能。

我的问题是 - 在路由表中定义的多条路由中,我想将一条路由设为默认路由。

1 个答案:

答案 0 :(得分:0)

您有两个主要问题:

  1. 必须在一般路线之前申报特定路线。
  2. 您定义的网址格式与预期网址http://localhost:3729/Information/1/2不匹配。
  3. 要解决这些问题,您应该在默认路线之前定义路线,如下所示。

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

    您还使用可选的Cust_ID参数定义了您的“信息”网址,我猜这是没有任何意义的(除非您希望网址/Information列出所有客户)。根据您的要求,Cust_IMAGE_ID可选也可能没有任何意义。

      

    另一方面,如果图像实际显示在页面上,将客户图像ID放入URL似乎是一个坏主意。这意味着用户可以更改URL以提取与当前客户无关的其他客户的图像。