我正在尝试使用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";
}
}
这在Windows窗体测试应用程序中工作正常,但在Xamarin应用程序中,我在client.PutAsJsonAsync上得到一个例外:
E / mono-rt(7519):[ERROR]致命未处理的异常:System.TypeLoadException:无法从程序集'System.Net.Http加载'System.Net.Http.ObjectContent`1 [T]'。格式,Version = 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);
据我所见,我的所有参考文献都是正确的。我使用了WebApi Client nuget包。
参考文献:
Newtonsoft.Json
System.Net.Http
System.Net.Http.Extensions
System.Net.Http.Formatting
System.Net.Http.Primitives
答案 0 :(得分:1)
您需要将以下Nuget包安装到引用您的HttpClient项目的所有项目
这些是我构建项目时Visual Studio的警告,在我完成之后,它起作用了!
答案 1 :(得分:1)
将您的数据序列化为JSON字符串,如下所示:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="fast_login_form">
<div class="fast_login_form_header"> click and hold and move </div>
</div>
<div class="fast_login_form">
<div class="fast_login_form_header"> click and hold and move </div>
</div>
答案 2 :(得分:0)
MSDN上的System.Net.Http.PutAsJsonAsync
方法的重载列表仅显示包含三个或四个参数的重载。在你的例子中,我看到你传递的两个。根据MSDN中的代码示例,当从HttpClient
调用实例时,能够省略HttpClient
参数似乎是正确的。
然而,使用Xamarin它是作为MonoDevelop的分支构建的。 MonoDevelop使用Mono Framework,它是.NET Framework的一个端口。由于这种差异,我感兴趣的是是否应该为Mono,MonoDevelop或Xamarin打开一个bug。
回到重载方法列表,我建议尝试使用其中一个重载。
我建议尝试将HttpClient
传递给PutAsJsonAsync
方法,而不要从PutAsJsonAsync
的实例调用HttpClient
。