IHttpClientFactory 所建立的 HttpClient 執行個體會將 HTTP 狀態碼記錄為整數,而不是狀態碼名稱。
導入的版本
5.0 Preview 1
舊的行為
記錄會使用 HTTP 狀態碼的文字描述。 請考慮下列記錄訊息:
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
新的行為
記錄會使用 HTTP 狀態碼的整數值。 請考慮下列記錄訊息:
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
變更原因
此記錄的原始行為與一律使用整數值的 ASP.NET Core 其他部分不一致。 不一致會難以透過 Elasticsearch 這類結構化記錄系統來查詢記錄。 如需詳細內容,請參閱 dotnet/extensions#1549。
使用整數值會比文字更具彈性,因為其允許查詢值的範圍。
考慮過新增另一個記錄值來擷取整數狀態碼。 可惜的是,這樣做會導致另一個與 ASP.NET Core 其餘部分的不一致。 HttpClient 記錄和 HTTP 伺服器/裝載記錄已經使用相同的 StatusCode
機碼名稱。
建議的動作
最佳選項是更新記錄查詢,以使用狀態碼的整數值。 此選項可能會導致撰寫跨多個 ASP.NET Core 版本的查詢時發生困難。 不過,基於此目的而使用整數,記錄的查詢會更具彈性。
如果您需要強制與舊行為相容,並使用文字狀態碼,則請將 IHttpClientFactory
記錄取代為您自己的記錄:
將下列類別的 .NET Core 3.1 版本複製至您的專案:
重新命名類別,以避免與 Microsoft.Extensions.Http NuGet 套件中的公用類型衝突。
將
LoggingHttpMessageHandlerBuilderFilter
的內建實作取代為專案Startup.ConfigureServices
方法中您自己的實作。 例如: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>(); }