【问题标题】:Limit Nested Views within MVC 5在 MVC 5 中限制嵌套视图
【发布时间】:2015-01-31 19:24:29
【问题描述】:

我的网站需要如下所示的路线:

/products/product1/subcategory
/products/product1/subcategory2
/products/product2/subcagetory
etc..

我已经设置了到这里的路线:

routes.MapRoute("Product1", "products/product1/{action}" ....
routes.MapRoute("Product2", "products/product2/{action}" ....

我这样做是为了确保菜单项重定向到正确的视图,效果很好,但是我们的测试人员发现用户可以交换返回不规则结果的 URL,例如:

/products/product1/subcategory-for-product2
/products/product2/subcategory-for-product1

有没有办法阻止这种情况发生?

【问题讨论】:

  • 您需要在控制器中验证子类别是否属于该产品(您不能限制用户在地址栏中可以输入的内容)

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


【解决方案1】:

由于这是路由逻辑,您可以创建一个自定义约束来检查子类别是否属于产品:

 public class CategoryConstraint : IRouteConstraint
 {
      public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
      {
           // code to validate subcategory
      }
 }

...并在您的路由定义中使用此约束。

验证将检查类别是否属于产品,如果不匹配,则不匹配它,以便 URL 以无效请求结尾(找不到资源)。

使用这种方法,可以处理每个无效的传入路由以及生成传出链接;我认为在控制器中这样做更干净。

阅读more

编辑:刚刚发现 this 相关问题。

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2011-02-20
    • 2015-06-05
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多