Configuración de una ubicación de la carpeta del controlador alternativo en ASP.NET MVC
-
09-10-2019 - |
Pregunta
Puede una aplicación MVC que utiliza las convenciones carpeta predeterminada para los puntos de vista HTML, pero nos gustaría establecer carpeta alternativa "Servicios" con los controladores utilizados únicamente para servicios web XML o JSON regresar.
Así que la ruta "/ Servicios / Tareas / Lista" sería encaminada a "/Services/TaskService.cs", mientras que "/ Tareas / Lista" serían encaminados a la norma "/Controllers/TaskController.cs"
Nos gustaría mantener el servicio de controladores separados de los controladores de vista. No creemos que las áreas o el uso de otro proyecto va a funcionar. ¿Cuál sería la mejor manera de abordar esto?
Solución
Se puede hacer esto utilizando enrutamiento, y mantener los controladores en los espacios de nombres separados. MapRoute le permite especificar qué espacio de nombres corresponde a una ruta.
Ejemplo
Dado este controladores
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");
}
}
}
Y la siguiente enrutamiento
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
);
Usted debe esperar que las siguientes respuestas
/ Servicios / Inicio
ServiceController
/ Inicio
Controladores
Otros consejos
Usted querrá crear su propia implementación de la fábrica IControllerFactory controlador.
http://nayyeri.net/custom-controller- fábrica-in-asp-net-mvc para un ejemplo.
Si usted ve los nombres de carpetas amarillas Añadir carpeta Nombre de raíz
Después, tiene que modificar routes.MapRoute en "App_Start> RouteConfig"
Modificar ruta por defecto
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "mvcPartialView.HomeController" } // Namespace
);
y añadir a
routes.MapRoute(
"ApiControllerOne", // Name of folder
"ApiControllerOne/{controller}/{action}/{id}",
new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
);