web-dev-qa-db-ja.com

Web API 2で属性ルーティングを使用しようとするとInvalidOperationExceptionが発生するのはなぜですか?

MVC 4アプリケーションのWeb APIパッケージを更新して、属性ルーティングを使用できるようにしました。 config.MapHttpAttributeRoutes()を追加すると、「オブジェクトはまだ初期化されていません。アプリケーションのHttpConfiguration.EnsureInitialized()が呼び出されていることを確認してください。他のすべての初期化コードの後の起動コード。 "config.MapHttpAttributeRoutes()およびRoute属性を削除すると、すべてが以前と同じように機能します。このエラーを解決するにはどうすればよいですか?

これが私のWebApiConfigクラスです:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );



            // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
            // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
            // For more information, visit http://go.Microsoft.com/fwlink/?LinkId=279712.
            //config.EnableQuerySupport();
        }
    }

そしてエラーの詳細:

オブジェクトはまだ初期化されていません。他のすべての初期化コードの後に​​、アプリケーションの起動コードでHttpConfiguration.EnsureInitialized()が呼び出されていることを確認します。

説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーの詳細と、コードのどこで発生したかについては、スタックトレースを確認してください。

例外の詳細:System.InvalidOperationException:オブジェクトはまだ初期化されていません。他のすべての初期化コードの後に​​、アプリケーションの起動コードでHttpConfiguration.EnsureInitialized()が呼び出されていることを確認します。

ソースエラー:

現在のWeb要求の実行中に未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。

スタックトレース:

[InvalidOperationException: The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code.]
   System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() +127
   System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) +99
   System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) +191
   System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase httpContext) +233
   System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +60
   System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +82
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
33
Eric Levine

Global.asaxでは、Application_Startイベントを

WebApiConfig.Register(GlobalConfiguration.Configuration);

に:

GlobalConfiguration.Configure(WebApiConfig.Register);
75
Allan Elder