我可以以任何顺序将中间件应用到应用程序吗?
问题描述:
在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托管实施。
订单事宜。例如,如果您注册的中间件应该在任何其他中间件之后侦听错误,则有可能无法记录某些错误。
这只是一个假设情况,但如果您更改中间件注册的顺序,它可以让您很好地了解其他情况下的工作方式。
或只是管道的功能,做一些事情,并将结果传递给 下一个函数,那么它可能很重要。
就是这样!这就是为什么订单重要的原因。
那么,我怎么知道什么应该在什么后?我想将仅适用于开发环境的中间件,仅适用于生产环境的中间件,以及不同方法中常见的中间件组合起来。 – CrabMan
@crabman特定的中间件文档会告诉你订单是否重要,如果我们的事情,你应该以什么顺序配置它.. –