我最近安装了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
谷歌的消息很少。
答案 0 :(得分: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:
在项目的Web.config中,更新应用设置网页的值:版本为3.0.0.0
在web.config中的运行时部分下,检查已配置的每个程序集的版本,并将其更新为添加到项目中的程序集版本。以下是我的web.config中的更新配置:
&lt; runtime&gt;
&lt; assemblyBinding xmlns =“urn:schemas-microsoft-com:asm.v1”&gt;
&lt; dependentAssembly&gt;
&lt; assemblyIdentity name =“System .Web.Helpers“publicKeyToken =”31bf3856ad364e35“/&gt;
&lt; bindingRedirect oldVersion =”1.0.0.0-3.0.0.0“newVersion =”3.0.0.0“/&gt;
&lt; / dependentAssembly&gt;
&lt; dependentAssembly&gt;
&lt; assemblyIdentity name =“System.Web.Mvc”publicKeyToken =“31bf3856ad364e35”/&gt;
&lt; bindingRedirect oldVersion =“1.0.0.0-5.0.0.0” newVersion =“5.0.0.0”/&gt;
&lt; / dependentAssembly&gt;
&lt; dependentAssembly&gt;
&lt; assemblyIdentity name =“System.Web.WebPages”publicKeyToken =“31bf3856ad364e35”/&gt ;
&lt; bindingRedirect oldVersion =“1.0.0.0-3.0.0.0”newVersion =“3.0.0.0”/&gt;
&lt; / dependentAssembly&gt;
&lt; dependentAssembly&gt;
&lt; assemblyIdentity name =“EntityFramework”publicKeyToken =“b77a5c561934e089”/&gt;
&lt; bindingRedirect oldVersion =“0.0.0.0-5.0.0.0”newVersion =“5.0.0.0”/&gt;
&lt; / dependentAssembly&gt;
&lt; dependentAssembly&gt;
&lt ; assemblyIdentity name =“WebGrease”publicKeyToken =“31bf3856ad364e35”/&gt;
&lt; bindingRedirect oldVersion =“0.0.0.0-1.3.0.0”newVersion =“1.3.0.0”/&gt;
&lt; / dependentAssembly&gt;
&lt; dependentAssembly&gt;
&lt; assemblyIdentity name =“System.Web.Http”publicKeyToken =“31bf3856ad364e35”culture =“neutral”/&gt;
&lt; bindingRedirect oldVersion =“0.0 .0.0-5.0.0.0“newVersion =”5.0.0.0“/&gt;
&lt; / dependentAssembly&gt;
&lt; dependentAssembly&gt;
&lt; assemblyIdentity name =”System.Net.Http。格式化“publicKeyToken =”31bf3856ad364e35“culture =”neutral“/&gt;
&lt; bindingRedirect oldVersion =”0.0.0.0-5.0.0.0“newVersion =”5.0.0.0“/&gt;
&lt; / dependentAssembly&gt;
&lt; / assemblyBinding&gt;
&lt; / runtime&gt;
从Views文件夹中打开web.config。这里有三件事需要更新:
在configSections下,将Razor程序集的版本更新为3.0.0.0。
在system.web.webPages.razor部分更新主机版本,将System.Web.Mvc.MvcWebRazorHostFactory的版本更新为3.0.0.0。
System.web的页面部分提到了一些版本号。将所有这些更新到版本5.0.0.0
如果您安装了Web API帮助页面,请检查上面的程序集配置。
答案 1 :(得分: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错误。 :)
答案 2 :(得分:1)
您需要做的就是在软件包管理器控制台中为VS解决方案运行命令“update-package Microsoft.AspNet.WebApi”
答案 3 :(得分:0)
我不确定这个的确切原因是什么,但是当其中一个nuget包是旧版本(非预发行版)时,我通常会看到此错误。您可以尝试升级所有的nuget包,看看是否会消失。