当我在iOS的模拟器上运行我的应用程序时,它工作得很好。当我在设备上运行它时,第一次调用HttpClient失败。包含HttpClient调用的类位于PCL中。它看起来像这只虫子的一个实例。
但是,将以下内容添加到iOS项目app.config的文档中的解决方案对我不起作用( system.net.http添加);
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
......
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.5.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>编辑:
在我的app.config中,下面的方法成功地从服务器检索数据,但无法读取数据。包含ReadAsAsync(..)的底线失败并抛出异常。异常为“null”,也没有输出到终端。它在仿真器上工作得很好,但在设备上却不行。
public async Task<List<ExternalLoginViewModel>> GetExternalLoginsAsync()
{
using (var client = GetNewHttpClient(false))
{
client.DefaultRequestHeaders.Remove("Authorization");
var response = await client.GetAsync("api/account/externalLogins?returnUrl=/&generateState=true");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsAsync<List<ExternalLoginViewModel>>();
}
}发布于 2014-12-30 11:10:35
这是通过从PCL和iOS项目卸载“”nuget包来解决的。然后重新安装在这两个。iOS项目现在有对“System.Net.Http.Extensions”和“System.Net.Http.Primatives”的引用,但不包含对“System.Net.Http”的引用。下面的绑定重定向也在app.config项目的iOS文件中使用;
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />发布于 2014-12-19 07:15:18
程序集绑定重定向是错误的。您的iOS项目应该有一个具有以下内容的app.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="2.0.5.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>重定向的原因是Microsoft.Net.HttpClient包包含了System.Net.HttpClient名称空间,但是iOS和Android已经存在这个名称空间(甚至还有一些不同的特性)。在运行时,它将解析到错误的程序集,而不使用( iOS -)本地程序集。
您可以在我的iOS的PCL中找到一个基于HttpClient的WP8、Android和HttpClient演示项目。
https://stackoverflow.com/questions/27521738
复制相似问题