Убедитесь, что HttpConfiguration.EnsureInitialized ()

Я установил Visual Studio 2013, и когда я запустил приложение, я получил ошибку ниже.

Я не знаю, где я должен инициализировать этот объект.

Что делать?

Server Error in '/' Application. The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.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. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [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() +101 System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) +63 System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext) +107 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 Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18408 

Это для AlumCloud

См. Ниже приведенный ниже ответ gentiane, чтобы найти правильный способ справиться с этим.

В конце метода Application_Start в Global.Asax.cs попробуйте добавить: –

 GlobalConfiguration.Configuration.EnsureInitialized(); 

Если вы сделаете это в конце Application_Start, будет слишком поздно, так как вызывается WebApiConfig.Register.

Лучший способ разрешить это – использовать новый метод инициализации, заменив в Global.asax:

 WebApiConfig.Register(GlobalConfiguration.Configuration); 

от

 GlobalConfiguration.Configure(WebApiConfig.Register); 

Я действительно получил эту ошибку, когда я использовал маршрутизацию атрибутов в своем WebApi.

я имел

[Маршрут ( “WebAPI / siteTypes / {siteTypeId”]

вместо

[Маршрут ( “WebAPI / siteTypes / {siteTypeId}”]

для моего маршрута и получил эту ошибку. Я просто пропустил закрытую фигурную скобку. Как только я добавил его обратно, эта ошибка не повторилась.

Это старый, но является первым результатом поиска Google при поиске этой ошибки. После довольно много рытья я смог выяснить, что происходит.

tldr:
Все GlobalConfiguration.Configure делает invoke ваше действие и вызывает EnsureInitialized () . config.MapAttributeRoutes () необходимо вызвать до EnsureInitialized (), поскольку EnsureInitialized выполняется только один раз.

Значение: если вы собираетесь из существующего проекта Mvc, все, что вам нужно сделать, это:

  1. Добавить GlobalConfiguration.Configuration.EnsureInitialized (); в нижней части вашего метода Application_Start .

ИЛИ

  1. Переместите всю конфигурацию в один вызов GlobalConfiguration. Конфигурируйте:
 GlobalConfiguration.Configure(config => { WebApiConfig.Register(config); config.MapAttributeRoutes(); ... }); 

Копать глубже

HttpConfiguration.Configuration имеет свойство «Инициализатор», определенное следующим образом:

 public Action Initializer; 

HttpConfiguration.EnsureInitialized () запускает это действие и устанавливает _initialized в true

 public void EnsureInitialized() { if (_initialized) { return; } _initialized = true; Initializer(this); } 

HttpConfiguration.MapAttributeRoutes вызывает внутренний метод AttributeRoutingMapper.MapAttributeRoutes, который устанавливает HttpConfiguration.Initializer

 public static void MapAttributeRoutes(...) { RouteCollectionRoute aggregateRoute = new RouteCollectionRoute(); configuration.Routes.Add(AttributeRouteName, aggregateRoute); ... Action previousInitializer = configuration.Initializer; configuration.Initializer = config => { previousInitializer(config); ... }; } 

Запуск GlobalConfiguration.Configure Обеспечивает инициализацию сразу после вызова вашего действия:

 public static void Configure(Action configurationCallback) { if (configurationCallback == null) { throw new ArgumentNullException("configurationCallback"); } configurationCallback.Invoke(Configuration); Configuration.EnsureInitialized(); } 

Не забывайте, что если вы заходите к стене, источник для asp.net можно найти по адресу http://aspnetwebstack.codeplex.com/SourceControl/latest

У меня была связанная с этим проблема. Иногда вызов GlobalConfiguration.Configure несколько раз вызывает эту ошибку. В качестве обходного пути я поместил всю логику инициализации конфигурации в одном месте.

Для меня проблема заключалась в том, что я пытался использовать именованные параметры для полей строки запроса на моих маршрутах:

 [Route("my-route?field={field}")] public void MyRoute([FromUri] string field) { } 

Поля строки запроса автоматически сопоставляются с параметрами и фактически не являются частью определения маршрута. Это работает:

 [Route("my-route")] public void MyRoute([FromUri] string field) { } 

Хотя вышеупомянутый ответ работает, если он не установлен, в моем случае этот материал уже был установлен. Другое дело, что для одного из API, которые я написал, я префикс маршрута с помощью /. пример

 [Route("/api/abc/{client}")] 

.Установив это на

 [Route("api/abc/{client}")] 

исправил это для меня

Я получил эту ошибку, когда версия Newtonsoft.Json была другой в моем основном проекте по сравнению с вспомогательным проектом

ЕСЛИ ЭТОТ ОШИБКА ПОСМОТРЕТЬ, ЧТОБЫ ПОЛУЧИТЬ «ИЗ НЕДЕЛИ» , то есть ваше приложение работает отлично нормально какое-то время, спросите себя: добавлял ли я действие к controllerу или изменял любые маршруты до появления этой ошибки?

Если ответ «да» (и это, вероятно, есть), вы, вероятно, допустили ошибку в этом процессе. Неправильное форматирование, копирование / вставка действия и забывание, чтобы убедиться, что имена конечных точек уникальны и т. Д., Все это закончит вас. Предположение о том, что эта ошибка приводит к тому, как ее разрешить, может отправить вам лаять неправильное дерево.

Вызов

 GlobalConfiguration.Configuration.MapHttpAttributeRoutes(); 

до

 GlobalConfiguration.Configure(c => ...); 

завершает его выполнение.

Обычно это исключение возникает, когда шаблоны маршрутов в «Маршрутизация атрибутов» не являются правильными.

Например, я получил это, когда написал следующий код:

 [Route("{dirName:string}/contents")] //incorrect public HttpResponseMessage GetDirContents(string dirName) { ... } 

В синтаксисе ограничений маршрута {параметр: constraint} ограничение по умолчанию имеет строку типа. Не нужно упоминать это явно.

 [Route("{dirName}/contents")] //correct public HttpResponseMessage GetDirContents(string dirName) { ... } 

Однажды я начал получать эту ошибку. После того, как я изменил наше приложение, чтобы позвонить EnsureInitialized() я смог увидеть причину.

У меня был специальный атрибут, фильтр, на действие. У этого classа атрибутов произошел сбой в пакете NuGet, в котором он живет.

Несмотря на то, что я обновил код и все его скомпилировал, локальный рабочий IIS загружал старую DLL и не обнаруживал член classа во время инициализации, считывая атрибуты при действиях и т. Д.

По какой-то причине (возможно, из-за заказа / при инициализации нашего журнала) эта ошибка не была обнаружена, возможно, оставив WebAPI в странном состоянии, пока я не добавил EnsureInitialized() который поймал исключение и всплыл.

Выполнение правильного bin и obj clean с помощью удобного скрипта разрешило его.

  • Простой пример использования HTTP POST и использование ответа
  • Почему нет Char.Empty, как String.Empty?
  • C-запятая
  • Приложение Windows Forms, такое как Google Chrome с несколькими процессами
  • C Typedef и Struct Question
  • Как добавить индексное поле к результатам Linq
  • Компиляция / выполнение исходного файла C # в командной строке
  • Ошибка при развертывании приложения ClickOnce. Ссылка в манифесте не соответствует идентификатору загруженной сборки
  • Можно ли использовать Инициализатор объектов?
  • Область друзей в C ++
  • Как я перемещаю элементы в списке и удаляю их?
  • Interesting Posts

    Легкий способ повторения одного и того же теста на юнитах снова и снова?

    Rails 3 SSL Устаревание

    Как отключить верификатор драйверов в Windows 10?

    Получить веб-страницу, включая контент AJAX

    Хостинг нашего собственного календаря для совместного использования в команде?

    Что является хорошим примером для различения fileprivate и private в Swift3

    Поведение статических блоков с наследованием

    CryptographicException: заполнение недопустимо и не может быть удалено, а проверка MAC-адреса viewstate не удалась

    Является ли член-ссылочный class константы продлением срока службы временного?

    Обрезка PDF с использованием Ghostscript 9.01

    Android – drag and drop – переименование списка

    Выполнить строку в C # 4.0

    Есть ли способ автоматически включать файлы содержимого в файл проекта asp.net?

    Как изменить фигурирование с использованием морского фактора

    Можем ли мы использовать детектор жестов масштаба для увеличения зума в Android?

    Давайте будем гением компьютера.