Управление порядком выполнения промежуточного программного обеспечения в ASP.NET Core: методы и примеры

В ASP.NET Core порядок выполнения промежуточного программного обеспечения определяется порядком, в котором компоненты промежуточного программного обеспечения добавляются в конвейер приложения. Конвейер промежуточного программного обеспечения по существу представляет собой цепочку компонентов, каждый из которых выполняет определенную задачу в течение жизненного цикла запроса/ответа.

Вот несколько методов, которые можно использовать для управления порядком выполнения компонентов промежуточного программного обеспечения:

  1. Используйте метод UseMiddleware():

    app.UseMiddleware<FirstMiddleware>();
    app.UseMiddleware<SecondMiddleware>();
  2. Используйте метод Use()с лямбда-выражением:

    app.Use(async (context, next) =>
    {
       // Custom logic before invoking the next middleware
       await next.Invoke();
       // Custom logic after invoking the next middleware
    });
  3. Используйте метод UseWhen()для условного выполнения промежуточного программного обеспечения на основе предиката:

    app.UseWhen(context => context.Request.Path.StartsWithSegments("/admin"), appBuilder =>
    {
       appBuilder.UseMiddleware<AdminMiddleware>();
    });
  4. Используйте метод Map(), чтобы разветвить конвейер промежуточного программного обеспечения на основе пути запроса:

    app.Map("/api", apiApp =>
    {
       apiApp.UseMiddleware<ApiMiddleware>();
    });
    app.Map("/admin", adminApp =>
    {
       adminApp.UseMiddleware<AdminMiddleware>();
    });
  5. Используйте класс UseMiddlewareExtensions, чтобы вставить промежуточное ПО в определенную позицию:

    app.UseMiddleware<FirstMiddleware>();
    app.UseMiddleware<SecondMiddleware>();
    app.UseMiddleware<ThirdMiddleware>();
    
    // Insert FourthMiddleware between SecondMiddleware and ThirdMiddleware
    app.UseMiddleware<FourthMiddleware>();

Это всего лишь несколько примеров того, как можно контролировать порядок выполнения промежуточного программного обеспечения в ASP.NET Core. Фактический порядок будет зависеть от требований вашего конкретного приложения.