Routing Asp.net MVC ambiguo, due percorsi per la stessa pagina
-
09-06-2019 - |
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!
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.