限制 MVC 5 中的嵌套视图

本文关键字:嵌套 视图 MVC 限制 | 更新日期: 2023-09-27 18:33:05

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

/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

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

限制 MVC 5 中的嵌套视图

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

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

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

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

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

阅读更多。

编辑:刚刚找到这个相关问题。