13

我最近安装了 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

谷歌透露的很少。

4

4 回答 4

23

按给定顺序在包管理器控制台中运行以下命令:

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 中,将应用设置网页的值更新为 3.0.0.0

  2. 在 web.config 中的运行时部分下,检查配置的每个程序集的版本并将其更新为添加到项目中的程序集版本。以下是我的 web.config 中的更新配置:

    <runtime>
    <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="中性" />
    <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>
    </runtime>

从 Views 文件夹中打开 web.config。这里有三点需要更新:

  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 帮助页面,请在那里检查上述程序集配置。

于 2013-09-09T14:12:44.610 回答
12

我遇到了同样的错误。我只是稍微调整了 Ravi 的答案,发现通过更新/安装 WebApi.OData 5.0.0-rc1 包来更新 WebApi 包对我来说效果很好。我只是在包管理器上运行了这些:

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

我猜 WebApi.OData 包的预发布版本与较新版本的 WebApi 包有一些依赖关系,Nuget 无法将其作为依赖项进行检查。再说一次,从技术上讲,我是 WebApi OData 的新手,对这些软件包还不太了解,但是,是的,我可以使用 $expand 和 $select 功能运行该项目,并且不会出现 GlobalConfiguration 错误。:)

于 2013-09-10T07:53:53.993 回答
0

我不确定确切的原因是什么,但是当 nuget 包之一是旧版本(非预发行版)时,我通常会看到此错误。您能否尝试升级所有 nuget 包,看看是否会消失。

于 2013-08-22T17:15:02.723 回答
0

您需要做的就是在 VS 解决方案的包管理器控制台中运行命令“update-package Microsoft.AspNet.WebApi”

于 2017-11-06T07:07:38.140 回答