1

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

      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 }
        );

第一条路线将捕获像这样的网址

  • zh-CN/11111/目标/列表
  • zh-CN/11111/目标/编辑/2

第二条路线是默认路线,将用于这样的事情

  • 英文/帐户/登录
  • ETC

我的问题是我有某些控制器,如果它们是通过 applicationRoutes 路由来的,我想强制它们被调用。

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

我知道我可以在每个控制器操作中检查用户 ID 键是否存在,并且在路由数据中具有值。但这对我来说似乎并不优雅。

我也可以更具体地了解路线并执行以下操作:

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

但这不会在不提供用户 ID 值的情况下直接停止对 en-gb/Targets/List/ 的请求。

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

4

1 回答 1

0

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

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

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

于 2012-12-02T20:38:08.977 回答