Установка альтернативного папке контроллера в ASP.NET в MVC
мы можем приложение MVC, которое использует соглашения о папках по умолчанию для представлений HTML, но мы хотели бы настроить альтернативную папку "Services" с контроллерами, используемыми только для веб-служб, возвращающих xml или json.
таким образом, маршрут "/Services/Tasks/List" будет направлен на "/Services/TaskService.cs", в то время как" /Tasks/List "будет перенаправлен на стандартный" /Controllers/TaskController.cs"
мы хотели бы держать контроллеры службы отдельно от контроллеров вида. Мы не думайте, что области или использование другого проекта будут работать. Как лучше всего к этому подойти?
3 ответов
Вы можете сделать это, используя маршрутизацию и сохраняя контроллеры в отдельных пространствах имен. 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://nayyeri.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
);