我的网站需要看起来像这样的路线:
/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
有没有办法阻止这种情况发生?
答案 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相关问题。