1

У меня возникла проблема с маршрутизацией Web API 2 для литеральных сегментов.Ошибка маршрутизации Web API 2 для литерального сегмента

В одном проекте у меня ASP.NET MVC и WebAPI2 работают вместе, проект также работает с областями MVC.

Под каждой областью есть папка API, которая содержит API. Я сталкиваюсь с проблемой при попытке запросить следующий URL-адрес: {host}/accesscontrol/api/reports/orders.

  • AccessControl здесь название площади
  • отчетность является контроллер
  • заказов является буквальным сегментом.

Ошибка я получаю: Никаких действий не было найдено на контроллере «Отчетность», который соответствует запросу.

Это контроллер, который должен получить этот запрос:

[RoutePrefix("accesscontrol/api/reporting")] 
public class ReportingController : ApiController 
{ 
    [Route("bookings")] 
    [ResponseType(typeof(Booking))] 
    [HttpGet] 
    public async Task<IHttpActionResult> Bookings(string q = null) 
    { 
     //Code to get data 
     return Ok(bookings); 
    } 
} 

Когда я удалить [Route('Bookings')] атрибут, запрос работает хорошо, если независимо Бронирования сегмент или нет.

Это конфигурация маршрутизации под зоной класса регистрации:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.Routes.MapHttpRoute(
     "AccessControlApi_default", 
     "accesscontrol/api/{controller}/{id}", 
     new { id = RouteParameter.Optional } 
     ); 

    context.MapRoute(
     "AccessControl_default", 
     "accesscontrol/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

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

Редактировать

Я звоню RegisterAllAreas в Global.asax.cs файл следующим образом:

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 
+0

Можете ли вы попробовать отредактировать «[Маршрут (« заказы »)]« на »[Маршрут (« заказы/{q?} »)]» И посмотреть, не имеет значения? – valentin

+0

@valentin Я пробовал, тот же результат ошибки! –

ответ

0

я решил мою проблему, переместив: AreaRegistration.RegisterAllAreas(); из Global.asax.cs файл RouteConfig.cs файлов.

0

мне удалось заставить его работать просто добавить действие после того, как ваш контроллер в вашем MapHttpRoute и изменить [Маршрут («заказы»)] атрибута [ActionName («заказы»)], и все работает.

context.Routes.MapMvcAttributeRoutes(); 

    context.Routes.MapHttpRoute(
     "AccessControlApi_default", 
     "Accesscontrol/api/{controller}/{action}/{id}", 
     new { id = RouteParameter.Optional}); 

Я надеюсь, что это поможет вам.

+0

Я прочитал его, и он точно применяется. Я не знаю, где проблема. –

+0

попробуйте добавить это в свой контекст RegisterArea.Routes.MapMvcAttributeRoutes(); это позволит включить маршрутизацию атрибутов. – jtabuloc

+0

Я сделал это, я добавил его перед всем другим кодом отображения, но с тем же результатом ошибки! –