Настройка альтернативного расположения папки контроллера в ASP.NET MVC - PullRequest
11 голосов
/ 07 декабря 2010

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

Таким образом, маршрут "/ Services / Tasks / List" будет перенаправлен на "/Services/TaskService.cs", а "/ Tasks / List" будет перенаправлен на стандартный "/Controllers/TaskController.cs"

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

Ответы [ 3 ]

10 голосов
/ 07 декабря 2010

Вы можете сделать это, используя маршрутизацию и удерживая контроллеры в отдельных пространствах имен.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
        );

Следует ожидать следующих ответов

/ Услуги / Home

ServiceController

/ Home

Контроллеры

0 голосов
/ 02 августа 2016

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

После этого вам нужно изменить маршруты. 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
    );
0 голосов
/ 07 декабря 2010

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

Проверьте http://nayyeri.net/custom-controller-factory-in-asp-net-mvc для примера.

...