MVC路线存在冲突

时间:2016-08-13 11:27:46

标签: c# asp.net-mvc asp.net-mvc-routing

我需要在我的ASP.NET MVC应用程序中使用2条路径,并且我很难尝试以不会彼此窃取的方式定义路由。

  1. 我需要处理像
  2. 这样的网址
      

    www.website.com/Home/About

         

    www.website.com/Home/Contact

    1. 我还需要这样的网址
    2.   

      www.website.com/23a244x3/Products/2

           

      www.website.com/434e5s344/Services/1

           

      www.website.com/f2432g423/Profile

      所以我需要2条路线。

      #1中的网址由默认路由成功处理,即

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

      为了处理#2中的网址,我定义了以下路由

      routes.MapRoute(
          name: "PagesRoute",
          url: "{uniqueID}/{action}/{pagecount}",
          defaults: new { controller = "Pages", pagecount = UrlParameter.Optional }
      );
      

      不幸的是,现在路线#2(又名PagesRoute)也在处理来自#1的网址,例如www.website.com/Home/About。我还在IIS中设置了url重写规则,将所有url转换为小写,用于SEO目的,因此/ Home重定向到/ home等。

      我如何区分这两条路线? #2中的路线似乎很贪婪..

1 个答案:

答案 0 :(得分:1)

您必须不提供控制器,并为每个控制器提供路由:

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

解析器{uniqueID}{controller}基本相同。 Url中的任何字符串都将匹配两个路由,因此您需要一些区分2。

您还可以查看Route Constraints

routes.MapRoute(
    "PagesRoute",
    "{uniqueID}/{action}/{pagecount}",
    new { controller = "Pages", pagecount = UrlParameter.Optional },
    new { uniqueID = @"\d+" }
);