Freigeben über


Middleware: Neue Use-Überladung

Eine neue Überladung app.Use von wurde eingeführt. Wenn Sie app.Use aufrufen, aber nie next Middelware aufrufen, erhalten Sie nun 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 statt app.Use, um den Fehler zu beheben.

Weitere Informationen finden Sie im GitHub-Issue dotnet/aspnetcore#32020.

Eingeführt in 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 nun an context den Delegaten next übergeben:

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

Verwenden Sie app.Run, wenn Ihre Middleware nie next aufruft:

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

Grund für die Änderung

Die vorherige Use Methode ordnet 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 Delegaten zu next verwenden. Wechseln Sie zu app.Run, um den Fehler zu beheben.

Betroffene APIs

Keine.