2012-01-19 12 views
3

看看StackOverflow上做什麼:如何在MVC3的頁面URL中添加'文本slu?'?

http://stackoverflow.com/questions/8933768/c-sharp-boolean-outside-method-wont-read 

的URL作品,未經最後的裝飾,這主要是用於搜索引擎優化的目的。

我想在我的ASP.Net MVC3應用程序上這樣的東西。

假設在Article表中,我有一個字段Slug nvarchar(1024) not null,如何將其從路由引擎中推出,以便在有人訪問鏈接時出現?

想要該ID是可見的,即使沒有最後的slu work連接工作。如果我改變數據庫中的slu,,任何鏈接仍然可以正常工作,因爲ID是鏈接到文章的唯一鏈接。

一個清晰而簡短的例子會非常驚人。

+0

看起來'nvarchar(2083)'是來自[這裏]的URL的最佳列類型(http://stackoverflow.com/questions/1159928/what-is-the-best-column-type-for-url ) – stom

回答

7

要做到這一點,最好的辦法是讓url的第二部分,slug,在查找完成的方面成爲不相關的字段。您的路線定義是這樣的:

routes.MapRoute(
    "article" 
    "articles/{id}/{slug}", 
    new { controller = "Article", action = "Index", slug = "" } 
); 

和匹配動作:

public ActionResult Index(int id, string slug) { 
    var article = _repository.GetById<Article>(id); 

    ...... 

    return View(); 
} 

如果你關心的人,要求憑有效身份證無效蛞蝓(和影響這可以在搜索引擎優化),那麼你的控制器動作可能會有一個額外的操作來驗證對該文章的slu and,並且只要提供了不正確的slu does,301就會重定向到所需的URL。順便說一句,這就是StackOverflow的功能。如果您修改問題URL的標題部分,您將看到該網站將您重定向。

+1

這是一些乾淨,直接的代碼。感謝分享和額外的重定向建議。 :) –

+0

另一個原因,我討厭5分鐘編輯寬限期的答案,當你最初發布時,你的文章沒有提到任何關於搜索引擎優化或重定向的影響,直到我發佈我的答案後。 –

+0

對不起,@AnthonyShaw,這是一個事後,我實際上看到你的相關答案內容*編輯我的原始回覆後。有一個upvote。 :) –

2

routes.MapRoute("Slugged", "{controller}/{action}/{id}/{slug}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });'

然後,對於處理您的來電,同時接受一個id和蛞蝓參數的操作。

然後,我會驗證提供的slug是否與數據庫中的實際記錄相匹配,如果沒有,301會重定向到正確的id和slug(我之所以這麼說,是因爲你沒有如果人們發現你的slu can可以改變並以許多不同的方式鏈接到你)

-1

首先聲明路由「slug」參數,然後在定義動作鏈接或動作url時通過路由值傳遞它。

相關問題