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 引发安全错误的主要内容,如果未能解决你的问题,请参考以下文章

武装你的WEBAPI-OData便捷查询

武装你的WEBAPI-OData便捷查询

武装你的WEBAPI-OData入门

武装你的WEBAPI-OData入门

武装你的WEBAPI-OData资源更新Delta

Microsoft.AspNet.WebApi.OData 与 Microsoft.Data.OData 和 Microsoft.AspNet.OData 有啥区别?