强制控制器的mvc路由

时间:2012-12-02 20:30:29

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-controller

我在我的应用程序中定义了以下两个路由。

      routes.MapRoute(
             "ApplicationRoutes",
             "{language}-{country}/{userid}/{controller}/{action}/{id}",
            new { language="en" , country="gb",  id = UrlParameter.Optional }
        );


        routes.MapRoute(
             "Default",
             "{language}-{country}/{controller}/{action}/{id}",
            new { language = "en", country = "gb",  id = UrlParameter.Optional }
        );

第一条路线将是捕捉网址,如

  • 烯GB / 11111 /目标/列表
  • 烯GB / 11111 /目标/编辑/ 2

第二条路线是默认路线,将用于此类

  • 烯GN /帐户/登录

我遇到的问题是我有一些控制器,如果它们来自applicationRoutes路线,我只想调用它们。

例如,我想确保使用routedata中的用户ID调用目标控制器。

我知道如果userid键存在于routedata中的值,我可以检查每个控制器操作。但这对我来说似乎并不优雅。

我还可以更具体地说明路线,并做这样的事情:

  routes.MapRoute(
             "ApplicationRoutes",
             "{language}-{country}/{userid}/Targets/{action}/{id}",
            new { language="en" , country="gb", controller="targets", id = UrlParameter.Optional }
        ); 

但是这不会直接将请求停止到en-gb / Targets / List /而不提供userid值。

处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以为userid参数创建限制。

  routes.MapRoute(
             "ApplicationRoutes",
             "{language}-{country}/{userid}/{controller}/{action}/{id}",
              new { language="en" , country="gb",  id = UrlParameter.Optional },
              new { userid =@"\d+" }); 

这将确保userid是一个有效的整数,否则下一个路由将用于处理请求。