Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ObjectDisposedException,即使在将客户端处理程序设置为false之后也是如此,因此I';我没有处理和使用同一个实例_C#_Asp.net Web Api_Httpclient - Fatal编程技术网

C# ObjectDisposedException,即使在将客户端处理程序设置为false之后也是如此,因此I';我没有处理和使用同一个实例

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

通过阅读stackoverflow上的其他文章,我试图对多个方法重用同一个httpclient,但仍然得到错误:

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();