asp.mvc另外4条路线

时间:2013-08-02 18:20:54

标签: asp.net-mvc asp.net-mvc-routing global-asax

我使用asp.net MVC 4构建了一个Web应用程序。 我想拥有以下3种类型的路线:

  
      
  1. / action
  2.   
  3. /动作/ ID
  4.   
  5. / ID / ID2
  6.   

在global.asax中,我更改了路由,如下所示:

routes.MapRoute(
           name: "Without Action",
           url: "{id}/{id2}",
           defaults: new { controller = "Home", action = "City_Category" },
           namespaces: new[] { "Namespace.Controllers" }
        );

        routes.MapRoute(
            name: "Without Controller",
            url: "{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { "Namespace.Controllers" }
        );

但是当我尝试{action} / {id}时,它会转到global.asax中定义的第一个路径。仅当网址为{action}或{id} / {id2}时才有效。

如何才能使所有3条路线都工作?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果{id}{id2}始终为数字,则可以向路线添加约束,以便只有当这些值为数字时才会启用:

routes.MapRoute(
           name: "Without Action",
           url: "{id}/{id2}",
           defaults: new { controller = "Home", action = "City_Category" },
           new { id = @"\d+", id2 = @"\d+" }
           namespaces: new[] { "Namespace.Controllers" }
        );

答案 1 :(得分:0)

另一个想法是使用http://attributerouting.net/,你可以按属性定义路由,这是一个非常容易定义的路由,特别是如果你最终有很多复杂的路由。我有大约30个路由定义和很多注释,每个动作的URL如何。我可以使用这些属性删除所有注释和路由定义。