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
.
Zalecana akcja
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.