Domanda

Sto provando il routing ASP.NET MVC e ovviamente ho riscontrato un problema.Ho una sezione, /Admin/Pages/, e anche questa è accessibile tramite /Pages/, cosa che non dovrebbe.Cosa potrei perdermi?

Il codice di routing in 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 = "" }  
        );

    }

Grazie!

È stato utile?

Soluzione

Suggerirei di aggiungere un percorso esplicito per /Pages/ all'inizio.

Il problema è che viene gestito dalla route predefinita e deriva:

controller = "pagine" action = "indice" id = ""

che sono esattamente gli stessi parametri per il tuo percorso di amministrazione.

Altri suggerimenti

Per problemi di routing come questo, dovresti provare il mio Debug del percorso assemblaggio (utilizzare solo in fase di test).Può aiutare a capire questo tipo di problemi.

PSSe stai tentando di proteggere il controller delle Pagine, assicurati di utilizzare l'attributo [Autorizza].Non fare affidamento solo sull'autorizzazione dell'URL.

Potresti aggiungere un vincolo alla regola predefinita in modo che il tag {Controller} non possa essere "Pagine".

Nel tuo primo percorso è presente un token/parametro {action} che entra in conflitto con l'impostazione dell'azione predefinita.Prova a cambiare il nome del parametro nel tuo percorso o rimuovi il nome dell'azione predefinito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top