我正在使用.Net Core 2.1创建一个应用程序,并使用http客户端进行Web请求。问题是,我需要发送并行调用以节省时间,并且为此我正在使用Task.WhenAll()方法,但当我调用该方法时,我会收到错误消息:“此实例已经启动了一个或多个请求。属性只能在发送第一个请求之前修改”。之前我在使用RestSharp,一切都很好,但我想使用httpclient。以下是代码:
public async Task<User> 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<IHttpContextAccessor, HttpContextAccessor>();
那么我做错了什么?我需要用AddTransient()替换AddSingleton吗?还是有其他问题?还有一个问题,响应后我需要使用_client.Dispose()吗,因为我遵循的教程没有使用dispose方法,所以我有点困惑。
<IHttpContextAccessor,HttpContextAccessor>
而不是只有<HttpClient>
? - p3tch