首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在c# httpClient中重置设置?

如何在c# httpClient中重置设置?
EN

Stack Overflow用户
提问于 2018-08-08 03:13:52
回答 1查看 2.9K关注 0票数 0

在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;
        }
}

帖子

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;
        }
}

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

private static HttpClient client = new HttpClient();

因为我做了很多频繁的请求。但是,如果我重用这个对象,像头这样的设置仍然存在,这会导致问题。有没有一种方法可以只重置设置而保留对象?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 03:49:42

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

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);

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51733897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档