2017-09-02 69 views
1

我有一個使用少量Web Api 2控制器的asp.net網站類型項目。我將它轉換爲支持所有三種技術的web.net應用程序:webforms,web api和mvc。在將asp.net網站升級到asp.net web應用程序後,Web API 2路由不工作

Web api控制器已被轉換器(通過Project - > Convert to Web Application)移動到一個名爲Old_App_Code的文件夾中。他們在App_Code/WebApi文件夾中,現在他們在Old_App_Code/WebApi中。所有與一個例外控制器是在一個命名空間中,讓我們把它name1.name2.name3:

namespace name1.name2.name3 
{ 
    [RoutePrefix("api/v1/orders")] 
    public class OrdersController : BaseAppController //BaseAppController is a class that inherits ApiController and adds a few common methods to all WebApi controllers ... 
    { 
    ... 
    } 
} 

WebApiConfig.cs(Old_App_Code下):

namespace name1.name2.name3 
{ 
    /// <summary> 
    /// </summary> 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     {    
      config.MapHttpAttributeRoutes();//use attributes to map routes. 

     } 
    } 
} 

的global.asax.cs:

protected void Application_Start() 
{ 


    GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 

    // Code that runs on application startup 
    log4net.Config.XmlConfigurator.Configure(); 

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

} 

RouteConfig.cs:

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

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

我的問題是Web api路由不再工作,我得到404s。

我使用了ApiHelp頁面,唯一註冊的控制器是沒有命名空間的控制器。我把它放在一個名字空間裏,希望它不會出現(獲得一些一致性:-)),但它仍然顯示出來(我重新啓動IIS Express)。

不知何故,MapHttpAttributeRoutes似乎沒有找到這些控制器來構建web api路由。

任何想法?

我使用VS 2015與System.Web.Mvc和Microsoft.AspNet.WebApi 5.2.3版本5.2.3.0。

更新:工作的控制器直接從ApiController繼承,而其他控制器繼承自不同項目中的普通類(它繼承了ApiController),並在另一個應用程序中使用。有沒有辦法告訴註冊控制器的組件也是WebApi控制器?我更新了上面的代碼片段以反映這一點。

+0

OldAppCode和AppCode是兩個獨立的項目嗎? –

+0

@PrashanthBenny請注意它們是App_Code和Old_App_Code。 App_Code是包含代碼的網站類型項目中的特殊文件夾,例如它包含web api控制器。當網站轉換爲Web應用程序時,App_Code被重命名爲Old_App_Code。 – costa

+0

您沒有在Application_Start中註冊您的WebApiConfig。您已將它註釋掉 –

回答

0

我想通了。創建BaseAppController的項目引用了Microsoft.AspNet.WebApi.Core(和附加庫)的5.2.2版,而主Web應用程序引用了版本5.2.3。只要我在該項目中更改了對5.2.3的引用,控制器就已正確註冊。

+0

......可以做到的。很高興你能夠理順它。在安裝軟件包子依賴關係之前,我已經發生過這種情況,最終導致WebApi版本過期。 –