gpt4 book ai didi

c# - 在 ASP.NET Core 中,有没有办法从 Program.cs 设置中间件?

转载 作者:太空狗 更新时间:2023-10-29 20:19:33 25 4
gpt4 key购买 nike

我正在为 ASP.NET Core 网站构建一个支持库。我有一些需要启用的中间件,并且由于它们的作用,需要在任何其他中间件之前添加它们。

我可以在 IWebHostBuilder 上创建一个扩展方法来添加服务,同样用于配置日志记录,但我看不到任何以编程方式添加中间件的方法。有什么办法吗?查看 WebHost/WebHostBuilder 的源代码,没有发现任何问题。


鉴于第一条评论,我可能还不够清楚。我知道如何创建和使用中间件。我想要做的是确保当框架在 Startup 上调用 Configure(IApplicationBuilder app) 方法时,我的中间件已经就位。以类似于能够在创建 Startup 之前执行 ServiceConfiguration 的方式。所以像

这样的扩展方法
public static IWebHostBuilder AddPayscaleHostingServices(this IWebHostBuilder webHostBuilder, string serviceName)
{
return webHostBuilder.ConfigureServices(collection =>
{
collection.RegisterPayscaleHostingServices();
}).ConfigureLogging(factory =>
{

});
}

让我能够在 webHostBuilder.Build 方法之前进行一些设置,但我没有看到任何类似的中间件/IApplicationBuilder 上的任何东西。

谢谢,埃里克

最佳答案

您可以使用启动过滤器来实现此目的。启动过滤器允许您从 DI 容器解析的服务配置中间件。

定义启动过滤器很容易:

public class MyStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
// Configure middleware
// ...

// Call the next configure method
next(app);
};
}
}

始终确保调用 next(app) 或任何其他不会被配置的中间件。

现在在您的 ConfigureServices 方法中将启动过滤器注册为 IStartupFilter 的单例实现:

services.AddSingleton<IStartupFilter, MyStartupFilter>();

关于c# - 在 ASP.NET Core 中,有没有办法从 Program.cs 设置中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43603568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com