Sdílet prostřednictvím


Middleware: New Use přetížení

Zavedli jsme nové přetížení app.Use . Pokud voláte app.Use middleware, ale nikdy nevoláte next , zobrazí se chyba kompilátoru CS0121:

Volání je nejednoznačné mezi následujícími metodami nebo vlastnostmi: UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>) a UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)

Pokud chcete tuto chybu vyřešit, použijte app.Run místo app.Use.

Diskuzi najdete v tématu o problému GitHubu dotnet/aspnetcore#32020.

Zavedená verze

ASP.NET Core 6.0

Staré chování

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

nebo

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

Nové chování

Delegáta teď můžete předat contextnext :

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

Použijte app.Run , když middleware nikdy nevolá next:

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

Důvod změny

Předchozí Use metoda přidělí dva objekty na požadavek. Nové přetížení zabrání těmto přidělením s malou změnou způsobu vyvolání middlewaru next .

Pokud se zobrazí chyba kompilace, znamená to, že voláte app.Use bez použití delegáta next . Přepněte na app.Run opravu chyby.

Ovlivněná rozhraní API

Nezaokrouhlovat.