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

时间:2016-04-22 12:12:39

标签: c# asp.net middleware

在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装饰器,或者只是做一些函数的管道并将结果传递给下一个函数,那么它可能很重要。

1 个答案:

答案 0 :(得分:3)

它与ASP.NET无关,但与OWIN托管实现无关。

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

这只是一个假设的案例,但如果您更改中间件注册的顺序,它可以很好地说明其他方案可能如何工作。

  

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

那就是它!这就是为什么订单重要的原因