Как зарегистрировать маршрут apicontroller и контроллера

#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}