【问题标题】:Forcing an mvc route for a controller强制控制器的 mvc 路由
【发布时间】:2012-12-02 20:30:28
【问题描述】:

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

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

第一条路线将捕获像

这样的 url
  • zh-CN/11111/Targets/List
  • zh-CN/11111/Targets/Edit/2

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

  • zh-cn/帐户/登录
  • 等

我的问题是我有某些控制器,我想强制仅在它们通过 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/ 的请求。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 太棒了。如果有一个控制器需要这个,那将是完美的,但可以说我有许多需要用户 ID 的控制器。正如您所指出的,我可以为每个控制器实现一个特定的路由,但是有没有更优雅的解决方案来为每个控制器创建一个路由?
    • 对不起,我忘记了那里的控制器限制。您可以保持控制器变量不变。
    • 即使有限制,这肯定不会阻止我在路由中没有用户 ID 的情况下进入 /en-gb/Targets/List,因为默认路由会处理这个问题。我想确保在目标控制器上调用的每个操作都包含路由数据中的用户 ID。
    • 好吧,如果您在生成 URL 时要小心,这将不是问题。否则你无法阻止人们搞砸它,总会有无效的 URL。可能有一些您可能想要的复杂规则,也许其他人可以提供帮助。
    • 操作方法选择器会是最合适的选择吗? erraticdev.blogspot.co.uk/2010/12/…。这是否可以应用于需要用户 ID 的控制器操作,并且方法选择器检查它是否存在于路由数据中,如果不返回则对请求无效?
    猜你喜欢
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多