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

2024-05-13

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

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


鉴于第一个评论,我可能还不够清楚。我知道如何创建中间件并使用它。我想做的是确保当框架在启动时调用Configure(IApplicationBuilder app)方法时,我的中间件已经就位。与能够在创建启动之前进行服务配置类似。所以像这样的扩展方法

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)或任何其他中间件won't进行配置。

现在将启动过滤器注册为单例实现IStartupFilter在你的ConfigureServices method:

services.AddSingleton<IStartupFilter, MyStartupFilter>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ASP.NET Core 中,有没有办法从 Program.cs 设置中间件? 的相关文章

随机推荐