2014-07-01 77 views
1

我正在嘗試使用WebAPI作爲MVC5應用程序的一部分。應用程序具有區域,以便與我創建的現有結構和「API」區域保持一致。然而,當我點擊API URL時,我遇到了一些路由問題。在應用領域的ASP.NET MVC WebAPI

我已閱讀了大量的帖子,主要是MVC4的例子,迄今爲止我還沒有取得任何成功。

起初,我有API路線的區域路由的一部分,所以上面的下方默認路由,我有另一個與RouteTemplate API/{controller}

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
      "API_default", 
      "API/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

然後我意識到我的錯誤,並移動到API路線在同一地區註冊不同的方法文件

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
     name: "Direct_API", 
     routeTemplate: "API/{controller}" 
    ); 
} 

現在我已經搬到了API的路線進出該地區的註冊文件的完全,在app_start創造了一個新的API路線的配置文件,並在註冊它應用程序路由文件之前的。但是,如果我轉到http://localhost:port/API/Import,我不打API控制器。

的API導入控制器坐在應用

public class ImportController : ApiController 
{ 
    [HttpGet] 
    public Array Get() 
    { 
     return new[]{true, false, false, true}; 
    } 
} 

Global.asax中登記的API區域

AreaRegistration.RegisterAllAreas(); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
GlobalConfiguration.Configure(WebApiConfig.Register); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 
BundleConfig.RegisterBundles(BundleTable.Bundles); 

我還試圖註冊文件MVC4方式這是WebApiConfig.Register(GlobalConfiguration.Configuration);

回答

2

我找到了答案,但我認爲我將在未來幫助其他人解決問題。許多涵蓋此主題的例子和文章都非常具體,即RouteConfig必須位於WebAPI配置之後。我對此非常謹慎。

但是,我完全忽視了區域註冊是第一次運行。 將AreaRegistration.RegisterAllAreas();移至GlobalConfiguration.Configure(WebApiConfig.Register);後解決了這個問題。

這仍然使API註冊成爲全球性的,這對於其本地化到某個區域並不合適。我想我可以通過屬性路由和刪除API的區域註冊文件來解決這個問題。