C# Can';t从.Net 5.0 WebApi访问GlobalConfiguration.Configuration

C# Can';t从.Net 5.0 WebApi访问GlobalConfiguration.Configuration,c#,asp.net,autofac,webapi,C#,Asp.net,Autofac,Webapi,GlobalConfiguration.Configuration在新的ASP.NET核心WebApi项目(.NET 5.0)中似乎不可用 复制步骤: 创建一个新的“ASP.NET核心Web Api”项目。(目标框架:.NET5.0,Lang:C#) 将这一行添加到代码的任意位置:var config=GlobalConfiguration.Configuration e、 g.将其添加到Startup.cs: public Startup(IConfiguration configuratio

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

复制步骤:

  • 创建一个新的“ASP.NET核心Web Api”项目。(目标框架:.NET5.0,Lang:C#)
  • 将这一行添加到代码的任意位置:
    var config=GlobalConfiguration.Configuration
  • e、 g.将其添加到Startup.cs:

    public Startup(IConfiguration configuration)
    {
            var c = GlobalConfiguration.Configuration;    // this line was added
            Configuration = configuration;
    }
    
  • 您需要
    System.Web.Http.GlobalConfiguration
    它似乎与
    Microsoft.AspNet.WebApi.WebHost
    Nuget软件包相对应,因此请使用以下工具安装它:
  • 运行该应用程序,在我们的新代码行中看到它失败,但出现以下异常:
  • System.TypeLoadException
    HResult=0x80131522
    Message=无法加载类型“System.Web.Routing.RouteTable”
    来自程序集“System.Web,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。
    Source=System.Web.Http.WebHost
    堆栈跟踪:
    在System.Web.Http.GlobalConfiguration.c.b__11_0()上
    在System.Lazy`1.ViaFactory(LazyThreadSafetyMode模式)
    位于System.Lazy`1.ExecutionAndPublication(LazyHelper ExecutionAndPublication,布尔useDefaultConstructor)
    在System.Lazy`1.CreateValue()处
    在System.Lazy`1.get_Value()
    在System.Web.Http.GlobalConfiguration.get_Configuration()中
    在C:\work\AspNetCore5.0\Program.cs中的AspNetCore5.\u 0.Program.Main(字符串[]args)处:第17行
    
    我最终想要实现的…是使用AutoFac作为我的依赖项解析程序(我已经完成了这项工作)。但是,当我创建自己的自定义
    过滤器时(例如ModelValidationFilter、ResponseFilter、ExceptionFilter),它要求我获得
    全局配置。配置。建议我获取“标准IIS主机”的
    GlobalConfiguration.Configuration
    ,如下所示:

    var config=GlobalConfiguration.Configuration

    。。。但它显然失败了

    我将非常感谢您在这方面的任何帮助或建议。
    谢谢

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


    由于您的最终目标是将AutoFac安装为依赖项解析程序,请尝试使用AutoFac。

    感谢您的回复@yaakov(非常感谢!)。“netcoreapp3.1”是否优于“net5.0”?我想使用这个框架,在这个框架中,事情正在朝着这个方向发展。(我还注意到“netcoreapp5.0”甚至还有一个目标——这会比“netcoreapp3.1”更好吗?)。同时,我将按照您的建议处理文档。谢谢是,如果您想要最新版本,请使用net5.0(除非您需要LTS,在这种情况下,请使用netcoreapp3.1或等待net6.0)。netcoreapp5.0名字是net5.0早期开发的一部分,不要使用itThanks@pinkfloydx33!非常感谢@z0mbi3您链接的文档仍然适用于旧的ASP.NET WebAPI,而不是ASP.NET核心。ASP.NET Core对其所有筛选器都具有内置的依赖项注入支持。所以您不需要做任何特殊的事情。@z0MB3 Yaakov已经为您提供了一个如何在ASP.NET Core中使用Autofac的链接。过滤器配置是以标准ASP.NET Core方式完成的(因为ASP.NET Core是高度模块化的,不关心您使用哪个DI框架),如中所述。ASP.NET Core中没有全局配置,因为配置的方式不同。
    Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.7
    
    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