Udostępnij za pośrednictwem


Oprogramowanie pośredniczące nie przekazuje już do punktu końcowego z delegatem żądania o wartości null.

Jak opisano w temacie https://github.com/dotnet/aspnetcore/issues/42413, oprogramowanie pośredniczące obsługujące pliki (DefaultFilesMiddleware, DirectoryBrowserMiddlewarei StaticFileMiddleware) zostało zaktualizowane tak, aby nie no-op (czyli odroczyć do następnego oprogramowania pośredniczącego w potoku), gdy istnieje aktywny punkt końcowy z pełnomocnikiem null żądania.

Wersja wprowadzona

ASP.NET Core 7.0

Poprzednie zachowanie

Wcześniej, jeśli bieżące żądanie miało aktywny punkt końcowy, czyli HttpContext.GetEndpoint() != null, oprogramowanie pośredniczące obsługujące pliki nie wykona żadnej akcji i po prostu deleguje do następnego oprogramowania pośredniczącego w potoku żądania.

Nowe zachowanie

Oprogramowanie pośredniczące obsługujące pliki nie będzie teraz wykonywać żadnej akcji tylko wtedy, gdy istnieje aktywny punkt końcowy, a jego RequestDelegate wartość właściwości to nie null, czyli HttpContext.GetEndpoint()?.RequestDelegate is not null.

Typ zmiany przełamującej

Ta zmiana ma wpływ na zgodność binarną.

Przyczyna zmiany

Ta zmiana umożliwia punktom końcowym wymianę metadanych z oprogramowaniem pośredniczącym obsługującym punkty końcowe, jednocześnie pozwalając innemu oprogramowaniu pośredniczącemu, które w przeciwnym razie zostałoby odroczone, również funkcjonować. Punkty końcowe mogą być aktywne w żądaniach w celu ustawiania i udostępniania metadanych za pomocą oprogramowania pośredniego, które jest świadome punktów końcowych, aby mogły wykonać swoją zamierzoną funkcję. Inne oprogramowanie pośredniczące, które wcześniej odroczało ich zachowanie, gdy punkt końcowy był aktywny, na przykład oprogramowanie pośredniczące obsługujące pliki, może również działać.

Na przykład punkt końcowy z delegatem żądania null zawierającym metadane autoryzacji może być ustawiony jako aktywny punkt końcowy dla żądania. powoduje, że AuthorizationMiddleware wymusza wymagania dotyczące autoryzacji, które, jeśli zostaną spełnione, pozwolą StaticFileMiddleware obsłużyć żądane pliki.

Jeśli polegasz na aktywowaniu punktu końcowego w żądaniu, aby zablokować działanie pośredniczącej warstwy oprogramowania obsługującego pliki, upewnij się, że punkt końcowy ma przypisaną wartość inną niż null dla swojej właściwości RequestDelegate.

Interfejsy API, których dotyczy problem

  • IApplicationBuilder.UseStaticFiles()
  • IApplicationBuilder.UseDefaultFiles()
  • IApplicationBuilder.UseDirectoryBrowser()