Udostępnij za pośrednictwem


Oprogramowanie pośredniczące: Nowe użycie przeciążenia

Wprowadzono nowe przeciążenie app.Use . Jeśli wywołasz app.Use wywołanie oprogramowania pośredniczącego next , ale nigdy nie wywołasz go, zostanie wyświetlony błąd kompilatora CS0121:

Wywołanie jest niejednoznaczne między następującymi metodami lub właściwościami: "UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)" i "UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)"

Aby rozwiązać ten problem, użyj polecenia app.Run zamiast app.Use.

Aby zapoznać się z dyskusją, zobacz problem z usługą GitHub dotnet/aspnetcore#32020.

Wprowadzona wersja

ASP.NET Core 6.0

Stare zachowanie

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

lub

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

Nowe zachowanie

Teraz możesz przekazać context go do pełnomocnika next :

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

Użyj app.Run polecenia , gdy oprogramowanie pośredniczące nigdy nie wywołuje metody next:

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

Przyczyna wprowadzenia zmiany

Poprzednia Use metoda przydziela dwa obiekty na żądanie. Nowe przeciążenie pozwala uniknąć tych alokacji z niewielką zmianą sposobu wywoływania oprogramowania pośredniczącego next .

Jeśli wystąpi błąd kompilacji, oznacza to, że wywołujesz wywołanie app.Use bez użycia delegata next . Przejdź do , aby app.Run naprawić błąd.

Dotyczy interfejsów API

Brak.