WebAPI OData 5.0 Beta - 访问 GlobalConfiguration 引发安全错误
Posted
技术标签:
【中文标题】WebAPI OData 5.0 Beta - 访问 GlobalConfiguration 引发安全错误【英文标题】:WebAPI OData 5.0 Beta - Accessing GlobalConfiguration throws Security Error 【发布时间】:2013-08-23 05:26:27 【问题描述】:我最近安装了 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
谷歌透露的很少。
【问题讨论】:
【参考方案1】:您只需在 VS 解决方案的包管理器控制台中运行命令“update-package Microsoft.AspNet.WebApi”
【讨论】:
【参考方案2】:我遇到了同样的错误。我只是稍微调整了 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 错误。 :)
【讨论】:
【参考方案3】:在包管理器控制台中按给定顺序运行以下命令:
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 中,将应用设置 pages:version 的值更新为 3.0.0.0
在 web.config 中的运行时部分下,检查配置的每个程序集的版本,并将其更新为添加到项目中的程序集版本。以下是我的 web.config 中的更新配置:
从 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 帮助页面,请检查上面的程序集配置。
【讨论】:
Command Update-Package Microsoft.AspNet.Mvc -Pre 给我以下错误 Update-Package : Updating 'Microsoft.AspNet.Mvc 4.0.20710.0' to “Microsoft.AspNet.Mvc 5.0.0-rc1”失败。找不到与“Microsoft.AspNet.Mvc 5.0.0-rc1”兼容的“Microsoft.AspNet.WebApi.HelpPage”版本。【参考方案4】:我不确定确切的原因是什么,但是当 nuget 包之一是旧版本(非预发布)时,我通常会看到此错误。您能否尝试升级所有 nuget 包,看看是否会消失。
【讨论】:
以上是关于WebAPI OData 5.0 Beta - 访问 GlobalConfiguration 引发安全错误的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft.AspNet.WebApi.OData 与 Microsoft.Data.OData 和 Microsoft.AspNet.OData 有啥区别?