Roteamento Asp.net MVC ambíguo, dois caminhos para a mesma página
-
09-06-2019 - |
Pergunta
Estou testando o roteamento ASP.NET MVC e é claro que me deparei com um problema.Eu tenho uma seção, /Admin/Pages/, e ela também pode ser acessada por meio de /Pages/, o que não deveria.O que poderia estar faltando?
O código de roteamento em global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Pages", // Route name
"Admin/Pages/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Pages", action = "Index", id = "" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Home", action = "Index", id = "" }
);
}
Obrigado!
Solução
Eu sugiro adicionar uma rota explícita para /Pages/ no início.
O problema é que está sendo tratado pela rota Default e derivando:
controlador = "páginas" action = "índice" id = ""
que são exatamente iguais aos parâmetros da sua rota Admin.
Outras dicas
Para problemas de roteamento como esse, você deve experimentar meu Depurador de rota montagem (use apenas em testes).Pode ajudar a descobrir esses tipos de problemas.
P.S.Se você estiver tentando proteger o controlador de páginas, certifique-se de usar o atributo [Autorizar].Não confie apenas na autorização de URL.
Você pode adicionar uma restrição à regra padrão para que a tag {Controller} não possa ser "Páginas".
Você tem em sua primeira rota {action} token/parâmetro que entra em conflito com a configuração da ação padrão.Tente alterar o nome do parâmetro na sua rota ou remova o nome da ação padrão.