C# 在ASP.NET Core中,是否有任何方法可以从Program.cs设置中间件?

C# 在ASP.NET Core中,是否有任何方法可以从Program.cs设置中间件?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我正在为ASP.NET核心网站建立一个支持库。我有一些需要启用的中间件,由于它们的作用,它们需要在任何其他中间件之前添加 我可以在IWebHostBuilder上创建一个扩展方法来添加服务,同样用于配置日志记录,但我看不到任何以编程方式添加中间件的方法。有没有办法做到这一点?查看WebHost/WebHostBuilder的源代码时,没有发现任何问题 考虑到第一个评论,我可能还不够清楚。我知道如何创建和使用中间件。我试图做的是确保当框架在启动时调用Configure(iaapplication

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

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



考虑到第一个评论,我可能还不够清楚。我知道如何创建和使用中间件。我试图做的是确保当框架在启动时调用Configure(iaapplicationbuilder app)方法时,我的中间件已经就位。以类似于在启动之前甚至在创建服务之前进行服务配置的方式。所以一个扩展方法

public static IWebHostBuilder AddPayscaleHostingServices(this IWebHostBuilder webHostBuilder, string serviceName)
{
    return webHostBuilder.ConfigureServices(collection =>
    {
        collection.RegisterPayscaleHostingServices();
    }).ConfigureLogging(factory =>
    {

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

谢谢,
Erick

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

定义启动筛选器很容易:

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

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

请参考这篇文章,先做你自己的研究。我知道如何创建中间件,也知道如何添加中间件。我不知道的是如何确保在启动类上调用Configure方法之前启用中间件。在一个完美的世界里,我将有机会在编写用户代码之前接触IApplicationBuilder。谢谢!出于某种原因,IStartupFilter这个名字让我思考的方向错了。现在我看了一下,以及它是如何在WebHost中使用的,这是有意义的。不是名字,而是我如何使用它。是的,我以前也很困惑。然而,这是一种非常简洁和强大的中间件配置方法。
services.AddSingleton<IStartupFilter, MyStartupFilter>();