首页 > 解决方案 > 无法从 .Net 5.0 WebApi 访问 GlobalConfiguration.Configuration

问题描述

GlobalConfiguration.Configuration在新的 ASP.NET Core WebApi 项目 (.Net 5.0) 中似乎不可用。

重现步骤:

  1. 创建一个新的“ASP.NET Core Web Api”项目。(目标框架:.NET 5.0,Lang:C#)
  2. 将此行添加到您的代码中的任何位置:var config = GlobalConfiguration.Configuration;

例如将其添加到 Startup.cs:

public Startup(IConfiguration configuration)
{
        var c = GlobalConfiguration.Configuration;    // this line was added
        Configuration = configuration;
}
  1. 你需要一个System.Web.Http.GlobalConfiguration 看起来与Microsoft.AspNet.WebApi.WebHostNuget 包对应的包,所以安装它:
Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.7
  1. 运行应用程序,在我们的新代码行看到它失败,但以下异常:
System.TypeLoadException
  HResult=0x80131522
  Message=Could not load type 'System.Web.Routing.RouteTable'
  from assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
  Source=System.Web.Http.WebHost
  StackTrace:
   at System.Web.Http.GlobalConfiguration.<>c.<CreateConfiguration>b__11_0()
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.get_Value()
   at System.Web.Http.GlobalConfiguration.get_Configuration()
   at AspNetCore5._0.Program.Main(String[] args) in C:\work\AspNetCore5.0\Program.cs:line 17

我最终想要实现的......是使用 AutoFac 作为我的依赖解析器(我得到了这个工作)。但是,当我按照AutoFac 关于 FilterProviders 的文档创建自己的自定义Filters(例如 ModelValidationFilter、ResponseFilter、ExceptionFilter)时,它需要我获得GlobalConfiguration.Configuration. 关于获取 GlobalConfiguration 的 AutoFac 文档建议我GlobalConfiguration.Configuration为“标准 IIS 托管”获取如下:

var config = GlobalConfiguration.Configuration;

...但它显然失败了。

我将不胜感激任何帮助或建议。谢谢!

标签: c#asp.netautofacwebapi

解决方案


ASP.NET Core 与 ASP.NET 或 ASP.NET WebAPI 不同,虽然控制器等许多东西只需要对端口进行细微调整,但配置和路由却大不相同。

由于您的最终目标是安装 AutoFac 作为依赖关系解析器,请尝试按照 AutoFac 的ASP.NET Core 文档进行操作。


推荐阅读