2017-09-02 10 views
1

Web Api 2コントローラを使用するasp.net Webサイトタイプのプロジェクトがあります。 webforms、web api、mvcという3つのテクノロジーをすべてサポートするasp.net Webアプリケーションに変換しました。asp.net Webアプリケーションをasp.net Webアプリケーションにアップグレードした後、Web API 2ルーティングが機能しない

ウェブAPIコントローラは、(プロジェクト経由 - > [Webアプリケーションへの変換)コンバータによって移動されたOld_App_Codeというフォルダに。それらはApp_Code/WebApiフォルダにあり、現在はOld_App_Code/WebApiにあります。 1の例外を除いてすべてのコントローラは、名前空間にあった、のは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のルーティングがもう機能しないということです。私は404を取得します。

私はApiHelpページを使用して登録された唯一のコントローラは、そもそも名前空間を持っていなかったものです。私は名前空間にそれが表示されないように(ある程度の一貫性を得るために:-))入れていますが、それでも(私はIIS Expressを再起動して)表示されます。

どういうわけか、MapHttpAttributeRoutesからウェブAPIルートを構築するために、これらのコントローラを見つけるように見えることはありません。

アイデア?

私はSystem.Web.MvcとMicrosoft.AspNet.WebApi 5.2.3のバージョン5.2.3.0とVS 2015を使用しています。

更新:他のコントローラが(ApiControllerを継承する)別のプロジェクトにあり、別のアプリケーションで使用されている共通クラスから継承している間、動作するコントローラはApiControllerから直接継承します。これらのコントローラがWebApiコントローラでもあることをコントローラに登録するようにコンポーネントに指示する方法はありますか?これを反映するために上記のコードスニペットを更新します。

+0

OldAppCodeとAppCodeは2つの独立したプロジェクトですか? –

+0

@PrashanthBennyそれらがApp_CodeとOld_App_Codeであることに注意してください。 App_Codeは、コードを含むウェブサイトタイプのプロジェクト内の特別なフォルダです。たとえば、Web APIコントローラが含まれています。 WebサイトがWebアプリケーションに変換されると、App_Codeの名前がOld_App_Codeに変更されます。 – costa

+0

Application_Start内にWebApiConfigを登録しませんでした。あなたはそれをコメントアウトしました –

答えて

0

私はそれを理解しました。 BaseAppControllerが作成されたプロジェクトは、メインWebアプリケーションがバージョン5.2.3を参照している間にMicrosoft.AspNet.WebApi.Core(および追加のライブラリ)のバージョン5.2.2を参照しました。そのプロジェクトで5.2.3への参照を変更するとすぐに、コントローラは正しく登録されました。

+0

...できます。あなたはそれをまっすぐに得ることができてうれしいです。私は、パッケージサブ依存関係をインストールすると、WebApiのバージョンを越えてしまう前にそれが起こっていました。 –

関連する問題