【发布时间】:2017-07-03 07:19:21
【问题描述】:
我在我的 api 中使用 http 客户端遇到了这个异常。
执行请求时发生未处理的异常。 System.InvalidOperationException:此实例已启动一个或多个请求。只能在发送第一个请求之前修改属性。
我将我的服务注入为
services.AddSingleton<HttpClient>()
我认为单身是我最好的bet。我的问题可能是什么?
编辑:我的用法
class ApiClient
{
private readonly HttpClient _client;
public ApiClient(HttpClient client)
{
_client = client;
}
public async Task<HttpResponseMessage> GetAsync(string uri)
{
_client.BaseAddress = new Uri("http://localhost:5001/");
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json");
var response = await _client.GetAsync(uri);
return response;
}
}
【问题讨论】:
-
也许发布整个课程?我们现在不知道发生了什么。
-
使用
AddScoped来按请求获取不同的实例。 -
消息很清楚,一旦您设置了 BaseAddress 之类的属性并发出请求,之后您将无法更改这些属性。所以单例是可以的,但前提是你也设置了一次属性。
-
我将调用各种服务/端点,并且需要相应地设置
BaseAddress。这是否排除了Singleton? -
@Kalten
AddScoped如果属性正在被修改并且同一范围内的多个请求会导致上面抛出的异常,则不建议使用。
标签: c# asp.net-core