2008-10-20 69 views
36

如何在ASP.NET MVC框架中生成友好的URL?例如,我們已經得到了類似如下的URL:如何在ASP.NET MVC中創建友好的URL?

http://site/catalogue/BrowseByStyleLevel/1

的1是研究水平(高等教育在這種情況下),以瀏覽的ID,但I'l要重新格式化的URL在同一方式StackOverflow做到了。

例如,這兩個網址會帶你到同一個地方:

https://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

https://stackoverflow.com/questions/119323/

編輯: URL的友好的部分被稱爲a slug

+0

什麼樣的URL的你到底想看到的,這一個 /目錄/ BrowseByStyleLevel/1 /高? 或/ catalog/BrowseByStyleLevel/Higher? – liggett78 2008-10-20 10:35:12

+0

理想情況下,第二個,但我需要Id保存每次基於文本查找。 – Kieron 2008-10-20 14:01:26

+0

關於「ASP.NET MVC 5」解決方案,請參閱http://stackoverflow.com/a/20662188/1298685。 – 2013-12-24 09:37:01

回答

47

有兩個步驟來解決這個問題。首先,創建一個新的路由或更改默認的路由,接受額外的參數:

routes.MapRoute( "Default", // Route name 
        "{controller}/{action}/{id}/{ignoreThisBit}", 
        new { controller = "Home", 
         action = "Index", 
         id = "", 
         ignoreThisBit = ""} // Parameter defaults) 

現在你可以在你的URI的末尾鍵入任何你想和應用程序將忽略它。

渲染時的鏈接,你需要添加的「友好」的文本:

<%= Html.ActionLink("Link text", "ActionName", "ControllerName", 
        new { id = 1234, ignoreThisBit="friendly-text-here" }); 
1

你有在Global.asax

routes.MapRoute(
        "Default", // Route name 
        "{controller}/{action}/{id}", // URL with parameters 
        new { controller = "Home", action = "Index", id = ""} 
        // Parameter defaults) 

的路線,你可以定義自己的路線,如:

控制器是控制器文件夾中的CS類。

您可以使用您選擇的名稱來定義您的ID。

系統會將值傳遞給您的actionResult方法。

您可以在此處詳細瞭解此步驟:http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

1

這是怎麼了我已經實現了我的申請蛞蝓URL。 注意:默認的Maproute不應該改變,路由也會按照添加到路由列表的順序進行處理。

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
    } // Parameter defaults 
); 
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" });