Установка альтернативного контролирующего папки в ASP.NET MVC

StackOverflow https://stackoverflow.com/questions/4372548

Вопрос

Мы можем приложение MVC, которое использует конвенции папок по умолчанию для представлений HTML, но мы хотели бы установить альтернативную папку «Услуги» с контроллерами, используемыми только для веб-сервисов, возвращающих XML или JSON.

Таким образом, маршрут «/ Услуги / задачи / Список» будут направлены на «/services/taskservice.cs», а «/ задачи / список» будут направлены на стандартные «/Controllers/taskcontroller.cs»

Мы хотели бы сохранить контроллеры обслуживания отдельными от контроллеров просмотра. Мы не думаем, что области или использование другого проекта будет работать. Что было бы лучшим способом подойти к этому?

Это было полезно?

Решение

Вы можете сделать это, используя маршрутизацию и сохраняя контроллеры в отдельных пространствах имен. MAPROUTE позволяет вам указать, какое пространство имен соответствует маршруту.

Пример

Учитывая это контроллеры

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");
        }
    }
}

И следующая маршрутизация

 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
        );

Вы должны ожидать следующие ответы

/ Услуги / Дом

ServiceController

/Дом

Контроллеры

Другие советы

Вы захотите создать свой собственный контроль заводской фабрики, внедряющий icontrollerFactory.

Проверить http://nayyyeri.net/custom-controller-factory-in-asp-net-mvc. Например.

Если вы видите желтые имена папок, добавьте имя папки в root

После того, как вы должны изменить маршруты. Maproute в «App_Start> RouteConfig»

Изменить маршрут по умолчанию

routes.MapRoute(
          "Default",
          "{controller}/{action}/{id}",
          new { controller = "Home", action = "Index", id =     UrlParameter.Optional },
          new string[] { "mvcPartialView.HomeController" } // Namespace 
      );

и добавьте это

routes.MapRoute(
       "ApiControllerOne", // Name of folder
       "ApiControllerOne/{controller}/{action}/{id}",
        new { controller = "ApiFactory", action = "callFactoryOne", id = UrlParameter.Optional },
        new string[] { "mvcPartialView.ApiControllerOne" } // Namespace
    );
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top