asp.net-core - IWebHostBuilder.Configure() 未在 ASP.NET Core 中执行

标签 asp.net-core app-startup

为什么调用 IWebHostBuilder.Configure() 扩展方法在 ASP.NET Core 中似乎没有执行任何操作(在 3.4.0 版本中体验过)?

例如在这种情况下:

public static IHostBuilder CreateHostBuilder(string[] args)
    => Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder => {
            webBuilder
                .UseSerilog( ... )

                .Configure(appBuilder => // Doesn't do anything.
                    appBuilder.UseSerilogRequestLogging( ... ))

                .UseStartup<Startup>();
        });

这里,在 Configure() 内部调用 UseSerilogRequestLogging() 来在 Startup 执行之前添加 Serilog 的请求日志记录中间件,以便将其放置在请求管道的开头,并将与日志记录相关的配置保留在一处。

但是 Configure() 实际上没有执行任何操作,并且没有添加中间件。

最佳答案

原因是IWebHostBuilder.Configure()方法不仅仅是一般的配置方法。它实际上将提供的委托(delegate)注册为 IStartupServiceCollection 。查看来源(尽管旧)here .

这意味着当 UseStartup<Startup>()随后被调用,它替换之前注册的委托(delegate),因此 Configure() 中的配置没有执行。

如果您放置Configure(),可以进一步确认此行为。之后UseStartup<>() 。在这种情况下,Configure()将取代 UseStartup<>() ,和UseStartup()不会执行。

关于 Configure() 的文档方法实际上暗示了这一点:

//
// Summary:
//     Specify the startup method to be used to configure the web application.
//

(回答我自己的问题,为可能最终像我一样困惑的其他人腾出一些时间。)

关于asp.net-core - IWebHostBuilder.Configure() 未在 ASP.NET Core 中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65061960/

相关文章:

asp.net - 无法从传输连接读取数据: Operation canceled

c# - Entity Framework Core 3.1 中的 LINQ group by

iOS 应用程序在首次通过 URL Scheme 打开时崩溃

android - 如何更改android中的启动 Activity

silverlight - Silverlight 启动缓慢的可能原因

java - Eclipse RCP : list of running plugins

asp.net - Application_Start 与 OnInit 与构造函数

asp.net-core - 如何将 NLog 目标与 Microsoft ILogger 过滤器结合使用?

c# - 具有多个可选参数的 asp.net mvc 路由不起作用

asp.net-core - 无法在 VS2015 中定位 netstandard 或 netstandardapp