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?

¿Fue útil?

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
    );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top