HttpClient 總是被添加traceparent 請求頭

最近在項目中發現,HttpClient中調用某Api總是出現403的異常,自己使用postman 調用即沒有問題,經排查是HttpClient 會自動添加traceparent請求頭

Accept-Encoding: gzip
User-Agent: Firefox/5.0 (Linux 3.4; rv:14.0) Gecko/20100101 Firefox/91.0
traceparent: 00-274628f3ce14109d06680c90e8cc19ca-42e0b82e7d106403-00
Content-Type: application/x-www-form-urlencoded
Content-Length: 160

原因是:在HttpClient 調用SendAsync 時,如果Activity的IdFormat  等於ActivityIdFormat.W3C 就會添加traceparent參數

代碼來源:https://github.com/dotnet/runtime/blob/release/5.0/src/libraries/System.Net.Http/src/System/Net/Http/DiagnosticsHandler.cs#L286

private static void InjectHeaders(Activity currentActivity, HttpRequestMessage request)
{
    if (currentActivity.IdFormat == ActivityIdFormat.W3C)
    {
        if (!request.Headers.Contains(DiagnosticsHandlerLoggingStrings.TraceParentHeaderName))
        {
            request.Headers.TryAddWithoutValidation(DiagnosticsHandlerLoggingStrings.TraceParentHeaderName, currentActivity.Id);
            if (currentActivity.TraceStateString != null)
            {
                request.Headers.TryAddWithoutValidation(DiagnosticsHandlerLoggingStrings.TraceStateHeaderName, currentActivity.TraceStateString);
            }
        }
    }
    .....
}

所以這裏把Activity.Current=null即可

Activity.Current = null;
var response = await _httpClient.PostAsync("your url", content);

參考文獻:c# - Remove TraceParent header from HttpClient requests - Stack Overflow

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章