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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top