Установка альтернативного контролирующего папки в ASP.NET MVC
-
09-10-2019 - |
Вопрос
Мы можем приложение 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
);