从Xamarin调用PutAsJsonAsync的异常

Mol*_*och 7 .net c# dotnet-httpclient xamarin

我正在尝试使用WebApi编写一个小型测试应用程序.我主要使用它,我能够从我的Web服务获取数据并在Android中显示它.

我添加了一个按钮,并使用了我在Winforms测试客户端中使用的相同代码:

   async void buttonSave_Clicked(object sender, EventArgs e)
    {
        HttpClient client = new HttpClient ();
        Customer data = new Customer () {
        Surname = editSurname.Text,
        GivenName = editGivenName.Text};

        var result = await client.PutAsJsonAsync("http://10.0.0.4/WebApplication1/api/Customers/2", data);
       if (result.IsSuccessStatusCode ) {
       labelStatus.Text = "Saved";
       }
    }
Run Code Online (Sandbox Code Playgroud)

这在Windows窗体测试应用程序中工作正常,但在Xamarin应用程序中,我在client.PutAsJsonAsync上获得异常:

E/mono-rt(7519):[错误]致命未处理异常:System.TypeLoadException:无法从程序集'System.Net.Http.Formatting,版本加载类型'System.Net.Http.ObjectContent`1 [T]' = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'.

有什么建议?使用Xamarin 3.

编辑:

如果我手动格式化内容,它可以工作:

        string sData =   Newtonsoft.Json.JsonConvert.SerializeObject(data);

        HttpContent content = new System.Net.Http.StringContent(sData, System.Text.Encoding.UTF8,  "application/json") ;
        var result = await client.PutAsync("http://10.0.0.4/WebApplication1/api/Customers/2",content);
Run Code Online (Sandbox Code Playgroud)

据我所知,我的所有参考文献都是正确的.我使用了WebApi Client nuget包.

参考文献:

Newtonsoft.Json
System.Net.Http
System.Net.Http.Extensions
System.Net.Http.Formatting
System.Net.Http.Primitives
Run Code Online (Sandbox Code Playgroud)

Jas*_*orn 0

MSDNSystem.Net.Http.PutAsJsonAsync上该方法的重载列表仅显示包含三个或四个参数的重载。在你的例子中,我看到你正在传递两个。根据 MSDN 的代码示例,在作为实例调用时能够省略参数似乎是正确的。HttpClientHttpClient

然而,Xamarin 是作为 MonoDevelop 的一个分支构建的。MonoDevelop 使用 Mono Framework,它是 .NET Framework 的一个端口。由于这种差异,我很感兴趣是否应该为 Mono、MonoDevelop 或 Xamarin 打开错误。

不过,回到重载方法列表,我建议尝试使用这些重载之一。

  • PutAsJsonAsync(HttpClient,字符串,T)
  • PutAsJsonAsync(HttpClient,Uri,T)
  • PutAsJsonAsync(HttpClient,字符串,T,CancellationToken)
  • PutAsJsonAsync(HttpClient,Uri,T,CancellationToken)

我建议尝试将 传递HttpClientPutAsJsonAsync方法而不PutAsJsonAsync从 的实例调用HttpClient

顺便说一句,这不是一个有保证的解决方案,因为它的信息太多,无法发表评论。希望这可以帮助。