C# 创建HttpClient帮助程序方法时出现问题
我有一个调用web服务的正常运行的异步任务:C# 创建HttpClient帮助程序方法时出现问题,c#,dotnet-httpclient,C#,Dotnet Httpclient,我有一个调用web服务的正常运行的异步任务: private async Task GetResult() { using (var client = new HttpClient()) { client.BaseAddress = new Uri(_baseAddress); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(
private async Task GetResult()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Username", _username);
client.DefaultRequestHeaders.Add("Action", "GET");
/* etc */
var response = await client.GetAsync(client.BaseAddress);
}
}
我想将HttpClient对象的创建分开,以便可以对其进行参数化和重用:
private async Task GetResult()
{
using (var client = GetClient(_baseAddress, _username))
{
var response = await client.GetAsync(client.BaseAddress);
}
}
private static HttpClient GetClient(string Address, string Username)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(Address);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Username", Username);
client.DefaultRequestHeaders.Add("Action", "GET");
/* etc */
return client;
}
}
虽然这在功能上与我相同,但后者抛出一个带有内部异常的aggregateeexception
错误
无法访问已释放的对象。对象名称:“System.Net.Http.HttpClient”
也许有一些我不理解的异步微妙之处?使用
GetClient
内部的摆脱。您仅使用使用
对仍然“属于您的所有权”的东西,当您返回客户端时,您是在“将所有权放弃给调用方”代码>
现在,调用方可以使用using
语句(您已经在GetResult
中正确地执行了该语句)
这与asnyc无关,只是标准的IDisposable
行为。太简单了,算了吧!我更新了标题以澄清问题-请随意回滚。看起来不错。我想不出正确的措辞。