xamarin中的ObjectDisposedException HttpClient.PutAsync

问题描述:

我在一个简单的应用程序中遇到了Xamarin的HttpClientPutAsync方法的问题。它有一个ListActivity子类,OnListItemClick方法重写。xamarin中的ObjectDisposedException HttpClient.PutAsync

protected override async void OnListItemClick(ListView l, View v, int position, long id) 
{ 
    var item = this.itemList[position]; 

    var core = new MyClass(); 
    await core.Toggle(item); 
} 

MyClass只包含一个方法:

internal async Task Toggle(string id) 
{ 
    using (var httpClient = new HttpClient()) 
    { 
     var content = new StringContent("test"); 

     var url = $"http://192.168.1.35/api/Toggle/{id}" 

     using (var result = await httpClient.PutAsync(url, content)) 
     { 
      result.EnsureSuccessStatusCode(); 
     } 
    } 
} 

我总是得到一个ObjectDisposedExceptionhttpClient.PutAsync。它说System.Net.Sockets.Socket被处置。

但是,如果我将PutAsync更改为GetAsync一切正常。

我在做什么错?

+0

只是我在使用HttpClient时学到的一个快速提示:您可能希望保存HttpClient实例并将其重用于多个请求。这就是它的设计如何使用。 –

我找到了原因。没有控制器注册来处理Web服务上的切换方法。当这是固定的,我成功地得到200 OK。但我仍然想知道为什么PutAsync给了我ObjectDisposedException而不是更合适的错误请求。