2014-10-30 31 views
0

我正在從事電子商務項目(Asp.Net Mvc3)。我的產品和類別路由下面提到更正瀏覽網址上的可選路由參數

routes.MapLocalizedRoute(
    "Product", 
    "p/{productId}/{SeName}", 
    new { controller = "Catalog", action = "Product", SeName = UrlParameter.Optional }, 
); 

routes.MapLocalizedRoute(
    "Product", 
    "c/{categoryId}/{SeName}", 
    new { controller = "Catalog", action = "Category", SeName = UrlParameter.Optional }, 
); 

當使用瀏覽網址http://mysite.in/p/123/my-product其重定向到正確的產品,同樣的事情發生的類別爲好。

現在,當我提供錯誤的SeName或只是從URL中刪除SeName它重定向到正確的產品/類別,這是正確的。但是我想要追加有效的SeName,即,如果URL sename中存在錯誤或沒有SeName,則應該在url中添加repsective product/category。以上功能性對Site SEO有任何影響。

Stackoverflow做同樣的想法,即雖然SeName是可選的,如果沒有提供,它會追加seName。

如果有人在同一個問題上工作過,請回復。

+1

這通常是使用動作過濾器完成的。 [本博客](http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/),雖然不完全相同的問題,應該指出你在正確的方向。 – 2014-10-30 09:41:52

+0

@StephenMuecke我認爲這是我想要的,但如果每次調用db來檢查動作過濾器中的sename並在需要時替換 – 2014-10-30 10:01:03

+0

除非在某處緩存ID/Name值,否則這將是唯一的選擇我懷疑它超過幾毫秒) – 2014-10-30 10:05:44

回答

1

這被稱爲'slug',通常在動作過濾器中處理。 Phil Haack有一篇很好的文章Manipulating Action Method Parameters,詳細解釋它。基本概念是處理過濾器OnActionExecuting方法以提取ID參數的路由值,然後從數據庫中查找相應的名稱並將該值添加到Name參數中。