限制MVC 5中的嵌套视图

时间:2014-12-03 09:40:25

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

我的网站需要看起来像这样的路线:

/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

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

1 个答案:

答案 0 :(得分: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相关问题。