C# 我可以按任何顺序将中间件应用于应用程序吗?

C# 我可以按任何顺序将中间件应用于应用程序吗?,c#,asp.net,middleware,C#,Asp.net,Middleware,在C#ASP.NET中,中间件应用程序的顺序是否重要 以下两段代码片段: public class Startup { ... public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { setUpMVCRoutes(app); app.UseSwaggerUi("foobar/api", "/

在C#ASP.NET中,中间件应用程序的顺序是否重要

以下两段代码片段:

public class Startup
{
    ...
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        setUpMVCRoutes(app);
        app.UseSwaggerUi("foobar/api", "/foobar/v3/api.json");
        app.UseSwaggerGen("foobar/{apiVersion}/api.json");
        app.UseDefaultFiles();
        app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());
        app.UseStaticFiles();
        app.UseIdentity();
        app.UseCookieAuthentication();
    }
    ...
}
还有这个

public class Startup
{
    ...
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseIdentity();
        app.UseCookieAuthentication();
        app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear());
        app.UseDefaultFiles();
        app.UseStaticFiles();
        setUpMVCRoutes(app);
        app.UseSwaggerGen("foobar/{apiVersion}/api.json");
        app.UseSwaggerUi("foobar/api", "/foobar/v3/api.json");
    }
    ...
}

有什么区别吗?我想,如果这个中间件的工作方式类似于python装饰器,或者只是通过一系列函数来执行某些操作并将结果传递给下一个函数,那么这可能很重要。

它与ASP.NET无关,而与OWIN宿主实现有关

秩序很重要。例如,如果您注册一个中间件,该中间件应该在任何其他中间件之后侦听错误,则有可能无法记录某些错误

这只是一个假设的情况,但是如果您更改中间件注册的顺序,它可以很好地提示其他场景如何工作

或者只是一系列函数,它们做了一些事情并将结果传递给 下一个函数,那么它可能很重要


就这样!这就是订单之所以重要的原因。

好吧,我怎么知道什么之后应该是什么?我想对只在开发环境中工作的中间件、只在生产环境中工作的中间件以及不同方法中的常见中间件进行分组。@crabman特定的中间件文档将告诉您订单是否重要,如果我们的订单重要,您应该按什么顺序配置它。。