Routing personalizzato .NET MVC
-
06-07-2019 - |
Domanda
Mi chiedevo se potevo creare una mappa di routing con un livello più alto rispetto al controller. L'instradamento tipico dovrebbe includere "quotation / controller / action / id". Quello che sto cercando è qualcosa come " sezione / controller / azione / id " o "controller / sezione / azione / ID". Come posso farlo?
Soluzione
Nessun problema. Basta creare una route il cui URL è, ad esempio
path / to / mio / application / {Controller} / {action} / {id}
... e fornisce un controller e un'azione predefiniti come al solito.
Un esempio concreto di ciò è
context.MapRoute(
"Admin_default",
"admin/{controller}/{action}/{id}",
new { controller = "AdminHome", action = "Index", id = "" }
);
In questo modo verranno mappati, ad esempio, i seguenti URL:
/admin/ => AdminHomeController.Index
/admin/adminhome/ => AdminHomeController.Index
/admin/other/ => OtherController.Index
/admin/statistics/view/50 => StatisticsController.View(50)
Si noti, tuttavia, che se si dispone anche di un percorso predefinito, ad esempio in questo modo:
context.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
... quindi anche i metodi di azione del controller nel routing Admin possono essere accessibili tramite questa route. Utilizza Debuger di routing URL per scoprirlo con certezza .