在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装饰器,或者只是做一些函数的管道并将结果传递给下一个函数,那么它可能很重要。
答案 0 :(得分:3)
它与ASP.NET无关,但与OWIN托管实现无关。
订单很重要。例如,如果您注册了一个应该在任何其他中间件之后监听错误的中间件,那么就有可能无法记录某些错误。
这只是一个假设的案例,但如果您更改中间件注册的顺序,它可以很好地说明其他方案可能如何工作。
或只是做一些事情的管道并将结果传递给 下一个功能,那么它可能很重要。
那就是它!这就是为什么订单重要的原因。