HTTP: Instance HttpClient vytvořené stavovými kódy protokolu IHttpClientFactory
HttpClient instance vytvořené stavovými IHttpClientFactory kódy PROTOKOLU HTTP jako celá čísla místo s názvy stavových kódů.
Zavedená verze
5.0 Preview 1
Staré chování
Protokolování používá textové popisy stavových kódů HTTP. Zvažte následující zprávy protokolu:
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
Nové chování
Protokolování používá celočíselné hodnoty stavových kódů HTTP. Zvažte následující zprávy protokolu:
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
Důvod změny
Původní chování tohoto protokolování je nekonzistentní s jinými částmi ASP.NET Core, které vždy používaly celočíselné hodnoty. Nekonzistence znesnadňuje dotazování protokolů prostřednictvím strukturovaných systémů protokolování, jako je Elasticsearch. Další kontext najdete v tématu dotnet/extensions#1549.
Použití celočíselných hodnot je flexibilnější než text, protože umožňuje dotazy na rozsahy hodnot.
Přidání další hodnoty protokolu pro zachycení celočíselného stavového kódu bylo považováno za. To by bohužel zavedlo další nekonzistence se zbytkem ASP.NET Core. Protokolování HttpClient a protokolování serveru HTTP nebo hostování již používají stejný StatusCode
název klíče.
Doporučená akce
Nejlepší možností je aktualizovat dotazy protokolování tak, aby používaly celočíselné hodnoty stavových kódů. Tato možnost může způsobit potíže s psaním dotazů napříč několika verzemi ASP.NET Core. Použití celých čísel pro tento účel je ale pro dotazování protokolů mnohem flexibilnější.
Pokud potřebujete vynutit kompatibilitu se starým chováním a použít textové stavové kódy, nahraďte IHttpClientFactory
protokolování vlastními:
Zkopírujte do projektu verze .NET Core 3.1 následujících tříd:
Přejmenujte třídy, aby nedocházelo ke konfliktům s veřejnými typy v balíčku NuGet Microsoft.Extensions.Http .
Nahraďte integrovanou implementaci
LoggingHttpMessageHandlerBuilderFilter
vlastní v metodě projektuStartup.ConfigureServices
. Příklad:public void ConfigureServices(IServiceCollection services) { // Other service registrations go first. Code omitted for brevity. // Place the following after all AddHttpClient registrations. services.RemoveAll<IHttpMessageHandlerBuilderFilter>(); services.AddSingleton<IHttpMessageHandlerBuilderFilter, MyLoggingHttpMessageHandlerBuilderFilter>(); }