我可以按任何顺序将中间件应用于应用程序吗?
在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托管实现无关。
订单很重要。 例如,如果您注册应该在任何其他中间件之后监听错误的中间件,则可能无法记录某些错误。
这只是一个假设的案例,但如果您更改中间件注册的顺序,它可以为您提供其他方案如何工作的良好提示。
或者只是做一些事情的管道并将结果传递给下一个函数,那么它可能很重要。
而已! 这就是为什么订单很重要的原因。