Freigeben über


Middleware: Neue Use-Überladung

Eine neue Überladung app.Use von wurde eingeführt. Wenn Sie app.Use aufrufen, aber die Middleware next nie aufrufen, erhalten Sie jetzt den Compilerfehler CS0121:

Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften mehrdeutig: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' und 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'

Verwenden Sie app.Run zum Beheben des Fehlers anstelle von app.Use.

Weitere Diskussionen finden Sie auf GitHub Issue dotnet/aspnetcore#32020.

Eingeführte Version

ASP.NET Core 6.0

Altes Verhalten

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

oder

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

Neues Verhalten

Sie können jetzt context an den next Delegierten übergeben.

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

Verwenden Sie app.Run, wenn Ihre Middleware next niemals aufruft.

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

Grund für Änderung

Die vorherige Use Methode weist zwei Objekte pro Anforderung zu. Die neue Überladung vermeidet diese Zuordnungen mit einer kleinen Änderung an der Art und Weise, wie Sie die next Middleware aufrufen.

Wenn Sie einen Kompilierungsfehler erhalten, bedeutet dies, dass Sie app.Use aufrufen, ohne den next Delegat zu verwenden. Wechseln Sie zu app.Run, um den Fehler zu beheben.

Betroffene APIs

Keiner.