2013-10-24 1 views
32

Я только что обновил свои пакеты веб-API в моем приложении MVC 4, чтобы я мог использовать маршрутизацию атрибутов. Когда я добавляю config.MapHttpAttributeRoutes(), я получаю сообщение об ошибке «Объект еще не был инициализирован. Убедитесь, что HttpConfiguration.EnsureInitialized() вызывается в стартовом коде приложения после всего другого кода инициализации». Если я удалю config.MapHttpAttributeRoutes() и атрибуты Route, все работает так, как раньше. Как я могу устранить эту ошибку?Почему я получаю InvalidOperationException, когда пытаюсь использовать маршрутизацию атрибутов с помощью Web API 2?

Вот мой 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() вызывается в стартовом коде приложения после всего другого кода инициализации.

Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.InvalidOperationException: объект еще не был инициализирован. Убедитесь, что HttpConfiguration.EnsureInitialized() вызывается в стартовом коде приложения после всего другого кода инициализации.

Источник ошибки:

Необработанное исключение при выполнении текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием следа стека исключений ниже.

Трассировка стека:

[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 

ответ

75

В Global.asax, событие Application_Start необходимо изменить с

WebApiConfig.Register(GlobalConfiguration.Configuration); 

к:

GlobalConfiguration.Configure(WebApiConfig.Register); 
+0

Это сделало трюк. Спасибо! – elevine

+2

Эта новая «инверсия» применяется к 'FilterConfig.RegisterGlobalFilters()', 'RouteConfig.RegisterRoutes()' и 'BundleConfig.RegisterBundles()'? –

+3

@ScottSEA - Конфигурации фильтров, маршрутов и связок являются специфическими для MVC, а тема здесь - WebAPI. Это совершенно разные животные, когда дело доходит до конфигурации. –

-1

закомментировать или удалить эту строку кода в WebApiConfig:

config.MapHttpAttributeRoutes(); 
Смежные вопросы