为什么在尝试使用Web API 2的属性路由时会出现InvalidOperationException?

26 浏览
0 Comments

为什么在尝试使用Web API 2的属性路由时会出现InvalidOperationException?

我刚刚在我的MVC 4应用程序中更新了Web API包,以便我可以使用属性路由。当我添加config.MapHttpAttributeRoutes()时,出现了一个错误,错误信息如下:“该对象尚未初始化。请确保在所有其他初始化代码之后,在应用程序的启动代码中调用HttpConfiguration.EnsureInitialized()方法。”如果我移除config.MapHttpAttributeRoutes()和路由属性,一切都像之前一样工作。我该如何解决这个错误?

以下是我的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 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: 该对象尚未初始化。请确保在所有其他初始化代码之后,在应用程序的启动代码中调用HttpConfiguration.EnsureInitialized()方法。]
   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

0