2016-03-07 94 views
0

我有一個結果頁面,它可以在URL的末尾有參數。這些參數代表類別和過濾器,並用於網站或電子郵件中的SEO鏈接。我們目前只允許route.config中的4個參數(類別和3個可選過濾器)。因此,這將是一個有效的URL:限制MVC路由上的額外參數導致錯誤

http://myshoppingsite.com/results/dresses/red/black/blue

routes.MapRoute("ResultsCanonicalFiltered", "results/{Categoy}/{Filter1}/{Filter2}/{Filter3}", new { controller = "Results", action = "Index", Category = UrlParameter.Optional, Filter1 = UrlParameter.Optional, Filter2 = UrlParameter.Optional, Filter3 = UrlParameter.Optional }); 

我們已經看到情況其中終端用戶將增加,導致下面的錯誤額外的參數:

「您正在查找的資源已刪除,更名或暫時不可用。「

不是有效的URL: http://myshoppingsite.com/results/dresses/red/black/blue/purple

我的問題是,我們CQN如何避免這種錯誤,如果用戶添加一個額外的參數最初從我們的網站或頁面內點擊一個網址的結尾,通常情況下,電子郵件廣告活動?

感謝,

朗達

回答

0

我想出了一個辦法做到這一點,如果任何人有過這個問題,他們可能會發現這很有用。

我可以添加一個「通配符」參數,以我的路線的終點(我把它叫做包羅萬象)是這樣的:

routes.MapRoute("ResultsCanonicalFiltered", "results/{Categoy}/{Filter1}/{Filter2}/{Filter3}/{*CatchAll}", new { controller = "Results", action = "Index", Category = UrlParameter.Optional, Filter1 = UrlParameter.Optional, Filter2 = UrlParameter.Optional, Filter3 = UrlParameter.Optional, CatchAll = UrlParameter.Optional }); 

而且其添加爲控制器的屬性/的ActionResult的參數,然後我們可以忽略這個參數。

使用以下url,CatchAll參數將包含我們將忽略的值purple/yellow/orange。

http://myshoppingsite.com/results/dresses/red/black/blue/purple/yellow/orange

有你有它。它可能不是最優雅的解決方案,但它的工作原理並避免客戶收到該錯誤消息。

朗達