在 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)
因为我经常提出很多请求。但是,如果我重新使用该对象,标题等设置将持续存在,从而导致问题。有没有办法可以重置设置但保留对象?
谢谢
不要使用 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,而不会出现问题。
| 归档时间: |
|
| 查看次数: |
5330 次 |
| 最近记录: |