2014-12-03 117 views
1

我的網站需要看起來像這樣的路線:限制嵌套視圖5

/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

您需要驗證子類別是否屬於控制器中的該產品(您不能限制用戶可以在地址欄中鍵入的內容) – 2014-12-03 09:44:45

回答

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有關的問題。