web-dev-qa-db-ja.com

WebAPI OData5.0ベータ版-GlobalConfigurationにアクセスするとセキュリティエラーがスローされます

最近、プレリリースバージョンのWebApi OData 5.0フレームワークをインストールして、新しい$ expandサポートを試してみました。すべて正常にビルドされましたが、App_Startで奇妙な例外が発生します。

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

ソースエラー:

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

スタックトレース:

[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

グーグルはほとんど明らかにしません。

13
Jason Wicker

パッケージマネージャーコンソールで、指定された順序で次のコマンドを実行します。

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

ここで、web.configに次の変更を適用します。

  1. プロジェクトのWeb.configで、アプリ設定webpages:versionの値を3.0.0.0に更新します

  2. Web.configのセクションruntimeで、構成されている各アセンブリのバージョンを確認し、プロジェクトに追加されているアセンブリのバージョンに更新します。以下は、私のweb.configで更新された構成です。

    <ランタイム>
    <assemblyBinding xmlns = "urn:schemas-Microsoft-com:asm.v1">
    <dependentAssembly>
    <assemblyIdentity name = "System.Web.Helpers" publicKeyToken = "31bf3856ad364e35" />
    <bindingRedirect oldVersion = "1.0.0.0-3.0.0.0" newVersion = "3.0.0.0" />
    </ dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name = "System.Web.Mvc" publicKeyToken = "31bf3856ad364e35" />
    <bindingRedirect oldVersion = "1.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
    </ dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name = "System.Web.WebPages" publicKeyToken = "31bf3856ad364e35" />
    <bindingRedirect oldVersion = "1.0.0.0-3.0.0.0" newVersion = "3.0.0.0" />
    </ dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name = "EntityFramework" publicKeyToken = "b77a5c561934e089" />
    <bindingRedirect oldVersion = "0.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
    </ dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name = "WebGrease" publicKeyToken = "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" culture = "neutral" />
    <bindingRedirect oldVersion = "0.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
    </ dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name = "System.Net.Http.Formatting" publicKeyToken = "31bf3856ad364e35" culture = "neutral" />
    <bindingRedirect oldVersion = "0.0.0.0-5.0.0.0" newVersion = "5.0.0.0" />
    </ dependentAssembly>
    </ assemblyBinding>
    </ランタイム>

Viewsフォルダーからweb.configを開きます。ここで更新するものが3つあります。

  1. ConfigSectionsで、Razorアセンブリのバージョンを3.0.0.0として更新します。

  2. System.web.webPages.razorセクションでホストのバージョンを更新し、System.Web.Mvc.MvcWebRazorHostFactoryのバージョンを3.0.0.0として更新します。

  3. System.webのページセクションに記載されているバージョン番号がいくつかあります。それらすべてをバージョン5.0.0.0に更新します

Web APIヘルプページがインストールされている場合は、上記のアセンブリ構成も確認してください。

23
S. Ravi Kiran

私はこれと同じエラーを抱えていました。 Raviの答えを少し調整したところ、WebApi.OData5.0.0-rc1パッケージを更新/インストールすることでWebApiパッケージを更新するだけで十分であることがわかりました。私はパッケージマネージャーでこれらを実行しました:

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

プレリリースバージョンのWebApi.ODataパッケージには、Nugetが依存関係として検査できない新しいバージョンのWebApiパッケージとの依存関係があると思います。繰り返しになりますが、私は技術的にはWebApi ODataの初心者であり、パッケージについてはまだよくわかりませんが、$ expandおよび$ select機能を使用してプロジェクトを実行でき、GlobalConfigurationエラーは発生しません。 :)

12
iamnobody

必要なのは、VSソリューションのパッケージマネージャーコンソールでコマンド「update-packageMicrosoft.AspNet.WebApi」を実行することだけです。

0
shruti gupta

これの正確な理由はわかりませんが、nugetパッケージの1つが古いバージョン(プレリリースではない)の場合、通常このエラーが表示されます。すべてのnugetパッケージをアップグレードして、これがなくなるかどうかを確認してください。

0