Compartilhar via


Middleware: sobrecarga de Novo Uso

Uma nova sobrecarga de app.Use foi introduzida. Se você chamar app.Use, mas nunca chamar o middleware next, agora receberá o erro do compilador CS0121.

A chamada é ambígua entre os seguintes métodos ou propriedades: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' e 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'

Para resolver o erro, use app.Run em vez de app.Use.

Para discussão, consulte o problema do GitHub dotnet/aspnetcore#32020.

Versão introduzida

ASP.NET Core 6.0

Comportamento antigo

app.Use(async (context, next) =>
{
    await next();
});

ou

app.Use(async (context, next) =>
{
    await SomeAsyncWork();
    // next not called...
});

Novo comportamento

Agora você pode passar context para o next delegado:

app.Use(async (context, next) =>
{
    await next(context);
});

Use app.Run quando o middleware nunca chamar next:

app.Run(async (context) =>
{
    await SomeAsyncWork();
    // next never called
});

Motivo da alteração

O método anterior Use aloca dois objetos por solicitação. A nova sobrecarga evita essas alocações ao mudar ligeiramente a forma como você invoca o middleware next.

Se você receber um erro de compilação, isso significa que você está chamando app.Use sem usar o next delegado. Alterne para app.Run para corrigir o erro.

APIs afetadas

Nenhum.