Mam zainstalowany program Visual Studio 2013 i po uruchomieniu aplikacji pojawia się poniższy błąd.
Nie mam pojęcia, gdzie mam zainicjować ten obiekt.
Co robić?
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
To jest dla AlumCloud
c#
.net
asp.net-mvc-routing
Wypełnianie stosu jest tym, co robię
źródło
źródło
GlobalConfiguration.Configure(Action<HttpConfiguration> configurationCallback)
zostanie wywołane po wywołaniu konfiguracjiCallback.Jeśli zrobisz to pod koniec Application_Start, będzie za późno, bo wywołano WebApiConfig.Register.
Najlepszym sposobem rozwiązania tego problemu jest użycie nowej metody inicjalizacji poprzez zastąpienie w Global.asax:
przez
źródło
GlobalConfiguration.Configure(config => new WebApiConfig().Register(config));
W rzeczywistości pojawił się ten błąd, gdy korzystałem z routingu atrybutów w moim WebApi.
miałem
zamiast
dla mojej trasy i otrzymałem ten błąd. Po prostu przegapiłem zamykający nawias klamrowy. Po ponownym dodaniu ten błąd nie wystąpił ponownie.
źródło
To jest stare, ale jest to pierwszy wynik w Google podczas wyszukiwania tego błędu. Po długich poszukiwaniach byłem w stanie dowiedzieć się, co się dzieje.
Znaczenie: jeśli pochodzisz z istniejącego projektu Mvc, wszystko, co musisz zrobić, to:
LUB
Kopać głębiej
HttpConfiguration.Configuration ma właściwość „Initializer” zdefiniowaną w następujący sposób:
HttpConfiguration.EnsureInitialized () uruchamia tę akcję i ustawia _initialized na true
HttpConfiguration.MapAttributeRoutes wywołuje metodę wewnętrzną AttributeRoutingMapper.MapAttributeRoutes, która ustawia HttpConfiguration.Initializer
GlobalConfiguration.Configure uruchamia usługę GuaranteeInitialized natychmiast po wywołaniu akcji:
Nie zapomnij, jeśli wpadniesz na ścianę, źródło asp.net jest dostępne pod adresem http://aspnetwebstack.codeplex.com/SourceControl/latest
źródło
Miałem powiązany problem. Czasami
GlobalConfiguration.Configure
wielokrotne wywołanie powoduje ten błąd. Aby obejść ten problem, umieściłem całą logikę inicjowania konfiguracji w jednym miejscu.źródło
Dla mnie problem polegał na tym, że próbowałem użyć nazwanych parametrów dla pól ciągu zapytania w moich trasach:
Pola ciągu zapytania są automatycznie mapowane na parametry i nie są w rzeczywistości częścią definicji trasy. To działa:
źródło
Chociaż powyższa odpowiedź działa, jeśli okaże się, że nie jest ustawiona, w moim przypadku te rzeczy były już ustawione. Różnica polegała na tym, że w przypadku jednego z napisanych przeze mnie interfejsów API trasę poprzedziłam znakiem /. Przykład
.Zmiana tego na
naprawił to dla mnie
źródło
HttpPrefix
dekorator a następnie do mojego indywidualnego punktu końcowego miałem dekorator:[Route("/")]
. Przekazanie pustego ciągu w trasie rozwiązało problem.JEŚLI WYDAJE SIĘ, ŻE BŁĄD WYSTĄPIŁ „Z NIGDZIE” , tzn. Twoja aplikacja przez jakiś czas działała doskonale, zadaj sobie pytanie: Czy dodałem akcję do kontrolera lub zmieniłem trasy przed wyświetleniem tego błędu?
Jeśli odpowiedź brzmi tak (i prawdopodobnie tak jest), prawdopodobnie popełniłeś błąd w procesie. Nieprawidłowe formatowanie, kopiowanie / wklejanie akcji i zapomnienie o upewnieniu się, że nazwy punktów końcowych są unikalne, itp. Skończą cię tutaj. Sugestia, że ten błąd dotyczy sposobu rozwiązania tego problemu, może spowodować, że szczekasz na niewłaściwe drzewo.
źródło
Połączenie
przed
kończy jego wykonanie.
źródło
Otrzymałem ten błąd, gdy wersja Newtonsoft.Json była inna w moim głównym projekcie niż w projekcie pomocniczym
źródło
Ten wyjątek występuje zwykle, gdy szablony tras w „Routingu atrybutów” nie są właściwe.
Na przykład dostałem to, kiedy napisałem następujący kod:
W składni ograniczeń trasy {parametr: ograniczenie} domyślnie ograniczenie jest typu ciąg . Nie trzeba o tym wyraźnie wspominać.
źródło
Pewnego dnia zacząłem otrzymywać ten błąd. Po tym, jak zmieniłem naszą aplikację, aby dzwoniła
EnsureInitialized()
, mogłem zobaczyć główną przyczynę.Miałem niestandardowy atrybut, filtr, dla akcji. Ta klasa atrybutów miała istotną zmianę wprowadzoną w pakiecie NuGet, w którym znajduje się.
Mimo że zaktualizowałem kod i wszystko zostało skompilowane, lokalny pracownik IIS ładował starą bibliotekę DLL i nie znajdował elementu członkowskiego klasy podczas inicjalizacji, odczytując atrybuty akcji itp.
Z jakiegoś powodu (prawdopodobnie z powodu zamówienia / kiedy nasze logowanie jest inicjowane) ten błąd nie był wykrywalny, prawdopodobnie pozostawiając WebAPI w dziwnym stanie, dopóki nie dodałem
EnsureInitialized()
który przechwycił wyjątek i nie pokazałem go.Wykonanie prawidłowego
bin
iobj
wyczyszczenia za pomocą podręcznego skryptu rozwiązało problem.źródło
W moim przypadku utworzyłem usługę sieciową w projekcie A i uruchomiłem ją z projektu B i otrzymałem dokładnie ten błąd. Problem polegał na tym, że brakowało niektórych plików .dll wymaganych przez A w folderze build-output w B. Upewnij się, że te pliki .dll są dostępne, naprawił problem.
źródło
W moim przypadku użyłem Entity jako parametru mojego działania, w którym brakuje jej „Schematu”.
Błędny atrybut:
Poprawnie:
źródło