作者:AIHFKYH_986 | 来源:互联网 | 2022-12-09 19:30
我正在.Net Core 2.1中创建一个应用程序,我正在使用http客户端进行Web请求.问题是我必须发送并行调用来节省时间,为此我使用的是Task.WhenAll()方法但是当我点击这个方法时,我得到错误"这个实例已经启动了一个或多个请求.属性只能被修改在发送第一个请求之前"以前我使用的是RestSharp,一切都很好,但我想使用httpclient.这是代码:
public async Task AddUser(string email)
{
var url = "user/";
_client.BaseAddress = new Uri("https://myWeb.com/");
_client.DefaultRequestHeaders.Accept.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Constants."application/json"));
_client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
var json = new {email = email }
var respOnse= await _client.PostAsJsonAsync(url,json);
if (response .IsSuccessStatusCode)
{ ....
这是构造函数:
private readonly HttpClient _httpClient;
public UserRepository(HttpClient httpClient)
{
_httpClient = httpClient;
}
方法调用:
var user1 = AddUser("user@user.com");
var user2 = AddUser("test@test.com");
await Task.WhenAll(user1, user2);
这是启动配置:
services.AddSingleton();
那么我做错了什么?我是否需要使用AddTransient()更改AddSingleton,还是有任何其他问题.还有一个问题我需要在响应之后使用_client.Dispose()因为我所遵循的教程没有使用dispose方法所以我对此感到困惑.
1> George Helya..:
HttpClient.DefaultRequestHeaders
(和BaseAddress
)只应在您提出任何要求之前设置一次.HttpClient
如果您在使用时不进行修改,则只能安全地用作单身人士.
而不是设置DefaultRequestHeaders
,在HttpRequestMessage
您发送的每个上设置标题.
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Headers.Accept.Clear();
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
request.COntent= new StringContent("{...}", Encoding.UTF8, "application/json");
var respOnse= await _client.SendAsync(request, CancellationToken.None);
替换"{...}"
为您的JSON.