【问题标题】:Can't access GlobalConfiguration.Configuration from .Net 5.0 WebApi无法从 .Net 5.0 WebApi 访问 GlobalConfiguration.Configuration
【发布时间】:2021-05-23 10:48:58
【问题描述】:

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

重现步骤:

  1. 创建一个新的“ASP.NET Core Web Api”项目。 (目标框架:.NET 5.0,语言: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.WebHost Nuget 包对应,所以安装它:
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's documentation on FilterProviders 创建我自己的自定义Filters(例如ModelValidationFilter、ResponseFilter、ExceptionFilter)时,它需要我获得GlobalConfiguration.ConfigurationAutoFac documentation on obtaining GlobalConfiguration 建议我为“标准 IIS 托管”获取 GlobalConfiguration.Configuration,如下所示:

var config = GlobalConfiguration.Configuration;

...但它显然失败了。

对于这方面的任何帮助或建议,我将不胜感激。 谢谢!

【问题讨论】:

    标签: c# asp.net autofac webapi


    【解决方案1】:

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

    由于您的最终目标是安装 AutoFac 作为依赖解析器,请尝试关注 AutoFac 的 documentation for ASP.NET Core

    【讨论】:

    • 感谢您的回复@yaakov(非常感谢!)。 “netcoreapp3.1”优先于“net5.0”吗?我想使用事情正在转向的框架。 (我还注意到“netcoreapp5.0”甚至还有一个目标 - 这会比“netcoreapp3.1”更好)。同时,我将按照您的建议处理文档。谢谢!
    • 是的,如果您想要最新的,请使用 net5.0(除非您需要 LTS,在这种情况下坚持使用 netcoreapp3.1 或等待 net6.0)。 netcoreapp5.0 名称是 net5.0 早期开发的一部分,请勿使用它
    • 谢谢@pinkfloydx33!非常感谢!
    • @z0mbi3 您链接的文档仍然适用于旧的 ASP.NET WebAPI 而不是 ASP.NET Core。 ASP.NET Core 对其所有过滤器都有内置的依赖注入支持。所以你不需要做任何特别的事情。
    • @z0mbi3 Yaakov 为您提供了如何在 ASP.NET Core 中使用 Autofac 的链接。过滤器配置是通过标准的 ASP.NET Core 方式完成的(因为 ASP.NET Core 是高度模块化的,并不关心你使用的是哪个 DI 框架),在docs.microsoft.com/en/aspnet/core/mvc/controllers/… 中有描述 ASP.NET Core 中没有 GlobalConfiguration,因为配置方式不同。
    猜你喜欢
    • 2018-12-11
    • 2016-02-03
    • 2018-07-24
    • 2021-11-10
    • 1970-01-01
    • 2018-07-06
    • 2019-12-25
    • 2021-07-01
    • 2013-08-23
    相关资源
    最近更新 更多