Como posso criar uma URL amigável no ASP.NET MVC?

Como faço para gerar URLs amigáveis ​​dentro do ASP.NET MVC Framework? Por exemplo, temos um URL que se parece com isso:

  http: // site / catalog / BrowseByStyleLevel / 1 

O 1 é o Id do nível de estudo (Superior neste caso) para navegar, mas gostaria de reformatar o URL da mesma forma que StackOverflow o faz.

Por exemplo, esses dois URLs levarão você ao mesmo lugar:

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

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

EDIT: A parte amigável do URL é conhecida como uma lesma .

Existem dois passos para resolver este problema. Primeiro, crie uma nova rota ou altere a rota padrão para aceitar um parâmetro adicional:

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

Agora você pode digitar o que quiser no final do seu URI e o aplicativo irá ignorá-lo.

Quando você renderiza os links, você precisa adicionar o texto “amigável”:

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

você tem uma rota no global.asax

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

você pode definir sua própria rota como:

controller é a class cs dentro da pasta controllers.

você pode definir seu id – com o nome que você escolher.

o sistema passará o valor para o seu método actionResult.

Você pode ler mais sobre esta etapa aqui: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

Foi assim que implementei o URL slug no meu aplicativo. Nota: O Maproute padrão não deve ser alterado e as rotas são processadas na ordem em que são adicionadas à lista de rotas.

 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="" });