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

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

以下2个代码段:

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托管实现无关。

订单很重要。 例如,如果您注册应该在任何其他中间件之后监听错误的中间件,则可能无法记录某些错误。

这只是一个假设的案例,但如果您更改中间件注册的顺序,它可以为您提供其他方案如何工作的良好提示。

或者只是做一些事情的管道并将结果传递给下一个函数,那么它可能很重要。

而已! 这就是为什么订单很重要的原因。