Como posso ter rotas em minúsculas e sublinhado, se possível, no ASP.NET MVC? Para que eu /dinners/details/2
ligasse DinnersController.Details(2)
e, se possível,/dinners/more_details/2
ligasse DinnersController.MoreDetails(2)
?
Tudo isso enquanto ainda usa padrões como {controller}/{action}/{id}
.
asp.net-mvc
url
routes
case
J. Pablo Fernández
fonte
fonte
Respostas:
Com o System.Web.Routing 4.5, você pode implementar isso diretamente, definindo a propriedade LowercaseUrls de RouteCollection:
Supondo também que você esteja fazendo isso por razões de SEO, você deseja redirecionar os URLs recebidos para minúsculas (como dito em muitos dos links deste artigo).
fonte
Esses dois tutoriais ajudaram quando eu queria fazer a mesma coisa e funcionar bem:
http://www.coderjournal.com/2008/03/force-mvc-route-url-lowercase/ http://goneale.com/2008/12/19/lowercase-route-urls-in-aspnet-mvc/
EDIT: Para projetos com áreas, você precisa modificar o método GetVirtualPath ():
fonte
Se você usou o ASP.NET Core, provavelmente deveria dar uma olhada no seguinte :
fonte
Se você estiver usando o UrlHelper para gerar o link, basta especificar o nome da ação e do controlador em minúsculas:
Resultados em: / media / photos / delete / 64 (embora meu controlador e ação sejam caso pascal).
fonte
Encontrei isso no Coder Journal de Nick Berardi , mas ele não tinha informações sobre como implementar a
LowercaseRoute
classe. Portanto, republicando aqui com informações adicionais.Primeiro estenda a
Route
classe paraLowercaseRoute
Modifique o
RegisterRoutes
método Global.asax.csNo entanto, gostaria de saber uma maneira de usar routes.MapRoute ...
fonte
routes.MapRouteLowercase(...
o que é mais agradável do que o anterior: goneale.wordpress.com/2008/12/19/...Você pode continuar usando a sintaxe do MapRoute adicionando esta classe como uma extensão ao RouteCollection:
Agora você pode usar na inicialização do aplicativo "MapRouteLowerCase" em vez de "MapRoute":
fonte
LowercaseRoute
classe no primeiro trecho de código acima parece vir dessa outra respostaNa verdade, isso tem duas respostas:
Você está por conta própria para os sublinhados, embora ...
fonte
Você poderia usar o atributo ActionName?
Acho que o caso não importa. More_Details, more_DETAILS, mOrE_DeTaILs no URL, todos levam você à mesma ação do controlador.
fonte