Impostazione di un percorso di cartella controller alternativo in ASP.NET MVC
-
09-10-2019 - |
Domanda
un app MVC che utilizza le convenzioni cartella predefinita per i punti di vista HTML, ma vorremmo istituire cartella alternativa "Servizi" con i controller utilizzati solo per i servizi web di ritorno XML o JSON.
Quindi, il percorso "/ Servizi / Tasks / List" sarebbe stato indirizzato a "/Services/TaskService.cs", mentre "/ Tasks / Lista" sarebbero indirizzati allo standard "/Controllers/TaskController.cs"
Vorremmo mantenere il servizio controller separati dai controller di vista. Non pensiamo che le aree o utilizzando un altro progetto funzionerà. Quale sarebbe il modo migliore per affrontare questo?
Soluzione
È possibile farlo utilizzando Routing, e mantenendo i controllori in spazi dei nomi separati. RottaMappa consente di specificare quali corrisponde ad un percorso spazio dei nomi.
Esempio
Dato questo controller
namespace CustomControllerFactory.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return new ContentResult("Controllers");
}
}
}
namespace CustomControllerFactory.ServiceControllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return new ContentResult("ServiceControllers");
}
}
}
E il seguente instradamento
routes.MapRoute(
"Services",
"Services/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "CustomControllerFactory.ServiceControllers" } // Namespace
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "CustomControllerFactory.Controllers"} // Namespace
);
Si dovrebbe aspettare le seguenti risposte
/ Servizi / Home
ServiceController
/ Home
Controller
Altri suggerimenti
Ti consigliamo di creare il proprio controller di fabbrica IControllerFactory attuazione.
http://nayyeri.net/custom-controller- fabbrica-in-asp-net-MVC per un esempio.
Se si vedono i nomi delle cartelle gialle Aggiungi cartella Nome root
Dopo, è necessario modificare routes.MapRoute in "App_Start> RouteConfig"
Modifica percorso predefinito
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "mvcPartialView.HomeController" } // Namespace
);
e Aggiungi il
routes.MapRoute(
"ApiControllerOne", // Name of folder
"ApiControllerOne/{controller}/{action}/{id}",
new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
);