C# ObjectDisposedException,即使在将客户端处理程序设置为false之后也是如此,因此I';我没有处理和使用同一个实例
通过阅读stackoverflow上的其他文章,我试图对多个方法重用同一个httpclient,但仍然得到错误:C# ObjectDisposedException,即使在将客户端处理程序设置为false之后也是如此,因此I';我没有处理和使用同一个实例,c#,asp.net-web-api,httpclient,C#,Asp.net Web Api,Httpclient,通过阅读stackoverflow上的其他文章,我试图对多个方法重用同一个httpclient,但仍然得到错误: System.ObjectDisposedException:无法访问已处置的对象。对象名称:“System.Net.Http.HttpClient”。 公共类程序 { 私有只读静态HttpClientHandler处理程序=新的HttpClientHandler(); 私有只读静态HttpClient=newhttpclient(handler,false); 公共计划() { c
System.ObjectDisposedException:无法访问已处置的对象。对象名称:“System.Net.Http.HttpClient”。
公共类程序
{
私有只读静态HttpClientHandler处理程序=新的HttpClientHandler();
私有只读静态HttpClient=newhttpclient(handler,false);
公共计划()
{
client.BaseAddress=新Uri();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
}
公共异步IDictionary GetCustomer(字符串customerId)
{
使用(客户端)
{
尝试
{
var response=await client.GetAsync().ConfigureAwait(false);
response.EnsureSuccessStatusCode();
var responseContent=await.result.Content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject您缺少两个方法都在处理您的HttpClient
,使得它在以后的调用中无法使用,就像任何已处理的对象(流,…)
如果在内部使用,则每次都要实例化一个新的HttpClient
(根据是否预期高负载,这不是一个好主意),或保留实例直到应用程序关闭。如果您试图重新使用它,在完成之前不要处理它。@LasseVågsætherKarlsen似乎我不理解该部分。我如何不处理它?不要使用使用(客户端)
?你知道那句话的作用吗?如果不知道,也许我们应该试着为你介绍一下。好的,我相信我理解每次实例化一个新客户机的过程,但是如果我想的话,我如何保持同一个实例?你能解释一下如何做到这一点吗?你的HttpClientHandler
和HttpClient
实例都是al在程序类中准备好静态变量,这意味着只要程序在运行,它们就会在那里。只需使用(…)
语句省去,就可以了。
var customer = programInstance.GetCustomer().GetAwaiter().GetResult();
var orders = programInstance.GetOrdersByCustomerId().GetAwaiter().GetResult();