如何重置 C# httpClient 中的设置?

ome*_*ega 1 c# http

在 C# 中,我发出 get 和 post 请求。这是我的代码

得到

private async Task<string> GetAsync(string uri, Token token, string accept, string content_type)
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(accept)); // ACCEPT header
        bool added = client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "text/xml");
        if (token != null) client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token.token_type, token.access_token);

        HttpResponseMessage g = await client.GetAsync(uri);
        if (g.IsSuccessStatusCode)
        {
            return await g.Content.ReadAsStringAsync();
        }
        else
        {
            errors.AddError(g.ReasonPhrase, await g.Content.ReadAsStringAsync());
            return null;
        }
}
Run Code Online (Sandbox Code Playgroud)

邮政

private async Task<string> PostAsync(string uri, Token token, string postData, string accept, string content_type)
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(accept)); // ACCEPT header
        if (token != null) client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token.token_type, token.access_token);

        var content = new StringContent(postData, Encoding.UTF8, content_type);

        HttpResponseMessage g = await client.PostAsync(uri, content);
        if (g.IsSuccessStatusCode)
        {
            return await g.Content.ReadAsStringAsync();
        }
        else
        {
            errors.AddError(g.ReasonPhrase, await g.Content.ReadAsStringAsync());
            return null;
        }
}
Run Code Online (Sandbox Code Playgroud)

但我读到你应该像这样重用 httpclient

private static HttpClient client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)

因为我经常提出很多请求。但是,如果我重新使用该对象,标题等设置将持续存在,从而导致问题。有没有办法可以重置设置但保留对象?

谢谢

The*_*edi 7

不要使用 HttpClient 的默认标头。设置请求的标头:

var content = new StringContent(postData, Encoding.UTF8, content_type) // CONTENT-TYPE header
content.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(accept)); // ACCEPT header
if (token != null) 
    content.Headers.Authorization = new AuthenticationHeaderValue(token.token_type, token.access_token);
Run Code Online (Sandbox Code Playgroud)

然后,所有线程都可以在应用程序的整个运行时使用相同的 HttpClient,而不会出现问题。