为什么.netcore 3.1中找不到WebApi授权服务?

Nav*_*p11 5 c# .net-core asp.net-core

我正在 .netcore 3.1 中创建一个 webapi 项目,这是我在 program.cs 中的代码

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}
Run Code Online (Sandbox Code Playgroud)

这是我的startup.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public async Task ConfigureServices(IServiceCollection services)
    {
        services.AddAuthorization();

        services.RegisterEasyNetQ("host=localhost;username=admin;password=admin");
        services.AddSingleton(typeof(CreateOrderHandler));
        services.AddControllers();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();
        app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
    }
}
Run Code Online (Sandbox Code Playgroud)

但运行该项目后我收到此异常:

应用程序启动异常System.InvalidOperationException:无法找到所需的服务。请通过在应用程序启动代码中调用“ConfigureServices(...)”内调用“IServiceCollection.AddAuthorization”来添加所有必需的服务。在Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.VerifyServicesRegistered(IApplicationBuilder应用程序)在Microsoft.AspNetCore.Builder.AuthorizationAppBuilderExtensions.UseAuthorization(IApplicationBuilder应用程序)在project.Order.Startup.Configure(IApplicationBuilder应用程序,IWebHostEnvironment env)在/82a891c3-0533-4937 -9b8d-44d0c7405e9f/Roaming/project/project.Order/Startup.cs:System.RuntimeMethodHandle.InvokeMethod(对象目标,Object []参数,签名sig,布尔构造函数,布尔wrapExceptions)处的System.Reflection.RuntimeMethodInfo处的第50行。
在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object 实例、IApplicationBuilder 构建器) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0 调用(Object obj、BindingFlags invokeAttr、Binder binder、Object[] 参数、CultureInfo Culture )(IApplicationBuilder 构建器) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.b__2(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancelToken) 未处理的异常。System.InvalidOperationException:无法找到所需的服务。请通过在应用程序启动代码中调用“ConfigureServices(...)”内调用“IServiceCollection.AddAuthorization”来添加所有必需的服务

我搜索了很多但找不到任何提示。

Kir*_*kin 3

public async Task ConfigureServices(IServiceCollection services)
Run Code Online (Sandbox Code Playgroud)

ConfigureServies方法预计不会返回Task. 这意味着 ASP.NET Core 框架无法找到ConfigureServices您添加的这个特定方法。

更新签名,如下:

public void ConfigureServices(IServiceCollection services)
Run Code Online (Sandbox Code Playgroud)

通过此更改,ConfigureServices将调用该方法,这将按预期添加服务。