#asp.net #asp.net-mvc #routes #controller #asp.net-apicontroller
#asp.net #asp.net-mvc #маршруты #контроллер #asp.net-apicontroller
Вопрос:
Мне нужно использовать следующий маршрут для всех базовых контроллеров моего проекта :
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
и следующий маршрут для всех действий apicontroller :
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Я регистрирую этот маршрут, используя следующий код :
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
если я сначала зарегистрирую WebApiConfig, действия во всех контроллерах не будут найдены.
Но если я сначала зарегистрирую RouteTable, конечная точка api в apicontroller не будет найдена.
в любом случае кажется, что один стирается другим.
Я что-то пропустил? Спасибо за любую помощь!
Комментарии:
1. Вы получите конфликт маршрутов. Маршруты API обычно имеют префикс чего-либо, например, чтобы избежать конфликта с маршрутами MVC
"api/{controller}/{id}"
. Я предлагаю вам сначала зарегистрировать маршруты API с префиксом, а затем маршруты MVC.2. Я сделал то, что вы предложили. Итак, теперь все работает нормально.
Ответ №1:
Как предложил Нкоси, я разрешил конфликт, добавив в свои маршруты API префикс, например: «api /{controller} /{id}