2013-08-21 22 views
13

Niedawno zainstalowałem przedpremierową wersję struktury WebApi OData 5.0, aby grać z nową obsługą $ expand. Wszystko w porządku, ale dostaję dziwny wyjątek w App_Start.WebAPI OData 5.0 Beta - dostęp do GlobalConfiguration rzuca błąd bezpieczeństwa

Attempt by security transparent method 
'System.Web.Http.GlobalConfiguration.get_Configuration()' 
to access security critical type 'System.Web.Http.HttpConfiguration' failed. 

Błąd Źródło:

Line 12: protected void Application_Start() 
Line 13: { 
Line 14:  WebApiConfig.Register(GlobalConfiguration.Configuration); // <-- 
Line 15: } 

stosu Ślad:

[TypeAccessException: Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access 
security critical type 'System.Web.Http.HttpConfiguration' failed.] 
    System.Web.Http.GlobalConfiguration.get_Configuration() +0 
    API.WebApiApplication.Application_Start() in Global.asax.cs:14 

[HttpException (0x80004005): Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access 
security critical type 'System.Web.Http.HttpConfiguration' failed.] 
    System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12863325 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475 

[HttpException (0x80004005): Attempt by security transparent method 'System.Web.Http.GlobalConfiguration.get_Configuration()' to access 
security critical type 'System.Web.Http.HttpConfiguration' failed.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12880068 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12721257 

Google ujawnia bardzo niewiele.

+0

znaleźliście rozwiązanie tego problemu? – Gaui

Odpowiedz

23

Uruchom następujące polecenia w konsoli Menedżer pakietów w podanej kolejności:

Uninstall-Package Microsoft.AspNet.Mvc.FixedDisplayModes 
Update-Package Microsoft.AspNet.Mvc -Pre 
Update-Package Microsoft.AspNet.WebApi -Pre 
Update-Package Microsoft.AspNet.WebApi.Tracing 

Teraz stosuje się następujące zmiany w pliku web.config:

  1. w pliku web.config swojego projektu, aktualizacja wartości stron ustawień aplikacji: wersja do wersji 3.0.0.0

  2. W sekcji wykonawczej sekcji w pliku web.config sprawdź wersję każdego skonfigurowanego zespołu i zaktualizuj go do wersja zespołu dodana do twojego projektu. Poniżej znajduje się zaktualizowana konfiguracja w moim web.config:

    <wykonawczego>
    < assemblyBinding xmlns = " urn: schematy-microsoft-com: asm.v1 " >
    <dependentAssembly>
    nazwa < assemblyIdentity = " system.Web .Helpers " TokenKluczaPublicznego = " 31bf3856ad364e35 "/>
    < bindingRedirect OldVersion = " 1.0.0.0-3.0.0.0 " newversion = " 3 .0.0.0 "/>
    </dependentAssembly >
    <dependentAssembly>
    < nazwa assemblyIdentity = " System.Web.Mvc " TokenKluczaPublicznego = " 31bf3856ad364e35 "/>
    < bindingRedirect OldVersion = " 1.0.0.0-5.0.0.0 " Newversion = " 5.0.0.0 "/>
    </dependentAssembly >
    <dependentAssembly>
    Nazwa < assemblyIdentity = " System.Web.WebPages " TokenKluczaPublicznego = " 31bf3856ad364e35 "/>
    < bindingRedirect OldVersion = " 1.0.0.0-3.0.0.0 " Newversion = " 3.0.0.0 "/>
    </dependentAssembly >
    <dependentAssembly>
    < nazwa assemblyIdentity = " EntityFramework " TokenKluczaPublicznego = " b77a5c561934e089 "/>
    < bindingRedirect OldVersion = " 0.0.0.0-5.0.0.0 " Newversion = " 5.0.0.0 "/>
    </dependentAssembly >
    <dependentAssembly>
    < nazwa assemblyIdentity = " WebGrease " TokenKluczaPublicznego = " 31bf3856ad364e35 "/>
    < bindingRedirect OldVersion = " 0.0.0.0-1.3.0.0 " Newversion = " 1.3.0.0 "/>
    </dependentAssembly >
    <dependentAssembly>
    < assemblyIdentity name = " System.Web.Http " publicKeyToken = " 31bf3856ad364e35 " kultura = " neutralny "/>
    < bindingRedirect OldVersion = " 0.0.0.0-5.0.0.0 " Newversion = " 5.0.0.0 "/>
    </dependentAssembly >
    <dependentAssembly>
    < nazwa assemblyIdentity = " System.Net.Http.Formatting " TokenKluczaPublicznego = " 31bf3856ad364e35 " kultura = " obojętny "/>
    < bindingRedirect OldVersion = " 0.0.0.0-5.0.0.0 " Newversion = " 5.0.0.0 "/>
    </dependentAssembly >
    </assemblyBinding >
    </Runtime >

Otwórz web.config z folderu widoków. Są tu trzy rzeczy do zaktualizowania:

  1. W sekcji configSections zaktualizuj wersje zestawów maszyn Razor jako 3.0.0.0.

  2. Zaktualizuj wersję hosta w sekcji system.web.webPages.razor, zaktualizuj wersję System.Web.Mvc.MvcWebRazorHostFactory jako 3.0.0.0.

  3. Istnieje kilka numerów wersji wymienionych w sekcji strony System.web. Zaktualizuj je wszystkie do wersji 5.0.0.0

Jeśli masz zainstalowane strony pomocy Web API, sprawdź również powyższe konfiguracje zestawów.

+1

Polecenie ** Update-Package Microsoft.AspNet.Mvc -Pre ** daje następujący błąd: _Apdate-Package: Nie zaktualizowano "Microsoft.AspNet.Mvc 4.0.20710.0" na "Microsoft.AspNet.Mvc 5.0.0-rc1" . Nie można znaleźć wersji "Microsoft.AspNet.WebApi.HelpPage", która jest kompatybilna z "Microsoft.AspNet.Mvc 5.0.0-rc1" ._ –

+0

Niż człowiek uratuje mój dzień. Świetnie ;-) – Sanath

0

Nie jestem pewien, jaki byłby dokładny powód tego, ale generalnie widzę ten błąd, gdy jeden z pakietów nuget jest starszą wersją (nie przed wydaniem). Czy mógłbyś spróbować zaktualizować wszystkie swoje pakiety nugetów i zobaczyć, czy to zniknie.

11

Miałem ten sam błąd.Po prostu poprawiłem nieco odpowiedź Raviego i odkryłem, że aktualizacja pakietu WebApi po aktualizacji/instalacji pakietu WebApi.OData 5.0.0-rc1 sprawdziła się na tyle dobrze. Właśnie te prowadził w menedżerze pakietów:

Update-Package Microsoft.AspNet.WebApi -Pre 
Install-Package Microsoft.AspNet.WebApi.OData -Version 5.0.0 

Zgaduję, że wydania wstępne wersje pakietu WebApi.OData ma pewną zależność z nowszej wersji pakietu WebAPI że Nuget zawodzi do wglądu jako zależność. Z drugiej strony, technicznie jestem nowicjuszem z WebApi OData i nie wiem jeszcze wiele o pakietach, ale, tak, mogę uruchomić projekt za pomocą funkcji $ expand i $ select oraz żadnego błędu GlobalConfiguration. :)

1

Wszystko, co musisz zrobić, to uruchomić komendę „update-pakiet Microsoft.AspNet.WebApi” w konsoli Menedżer pakietów dla rozwiązania VS

Powiązane problemy