Sdílet prostřednictvím


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.

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:

  1. Zkopírujte do projektu verze .NET Core 3.1 následujících tříd:

  2. Přejmenujte třídy, aby nedocházelo ke konfliktům s veřejnými typy v balíčku NuGet Microsoft.Extensions.Http .

  3. Nahraďte integrovanou implementaci LoggingHttpMessageHandlerBuilderFilter vlastní v metodě projektu Startup.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>();
    }
    

Ovlivněná rozhraní API

System.Net.Http.HttpClient