1

我正面臨Web API 2路由的文字段問題。Web API 2路由失敗的文字段

在一個項目中,我有ASP.NET MVC和WebAPI2一起運行,項目也運行MVC區域。

在每個區域下,都有包含API的API文件夾。我在嘗試請求以下網址時遇到問題: {主機}/accesscontrol/api/reporting /預訂。這裏

  • 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

我通過移動解決我的問題。

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     AreaRegistration.RegisterAllAreas(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new[] {"WebPortal.Controllers"} 
     ); 
    } 
} 
0

我設法使其工作在你的MapHttpRoute控制器後,只需添加行爲和將[Route(「bookings」)]屬性更改爲[ActionName(「bookings」)],一切正常。

context.Routes.MapMvcAttributeRoutes(); 

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

我希望這會幫助你。 AreaRegistration.RegisterAllAreas();的global.asax.cs文件RouteConfig.cs文件:

+0

我讀過它,它完全適用。我不知道問題在哪裏。 –

+0

嘗試在你的RegisterArea上添加這個'context.Routes.MapMvcAttributeRoutes();'這將啓用屬性路由。 – jtabuloc

+0

我做過了,我在所有其他映射代碼之前添加了它,但具有相同的錯誤結果! –