在ASP.NET Core中,是否可以从program.cs设置中间件



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

我可以在IWEBHostBuilder上创建一个扩展方法来添加服务,同样用于配置日志记录,但是我看不出任何以程序化方式添加中间件的方法。有什么办法做到这一点吗?查看Webhost/web Hostbuilder的来源。


鉴于第一个评论,我可能还不够清楚。我知道如何创建中间件并使用它。我要做的是确保通过框架在启动时调用配置(iapplicationbuilder应用程序(方法时,我的中间件已经到位。以类似的方式与能够在创建启动之前进行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)或任何其他中间件不会配置

现在,将启动过滤器注册为ConfigureServicesIStartupFilter的单例实现:

services.AddSingleton<IStartupFilter, MyStartupFilter>();

最新更新