从Xamarin Portable Class Library发送Http请求

时间:2014-03-22 20:30:32

标签: c# http xamarin mvvmcross portable-class-library

我在这个非常简单的任务中遇到了相当不错的问题,并寻求帮助。 问题是:Xamarin PCL使用超时执行Http请求的最佳和最可靠的方法是什么?

有几种选择:

  1. 使用旧的HttpWebRequest。这个解决方案肯定会起作用,但我在这个问题中描述的BeginGetRequestStream方法有问题:HttpWebRequest BeginGetRequestStream callback never called它还需要一些额外的丑陋代码来正确实现超时。

  2. HttpClient的。 PCL开箱即用的HttpClient不可用(我正在使用MvvmCross库所需的Profile 158)。我试图安装Microsoft HTTP客户端库但我仍然无法编译PCL项目,错误是:

      

    名称空间'System.Net'中不存在类型或命名空间名称'Http'(您是否缺少程序集引用?)

  3. PortableRest NuGet包。同样的问题 - 似乎在PCL中不起作用。大量编译错误和警告,例如:

      

    无法解析主要参考“System.Net.Http”,因为它对框架程序集“System.Runtime,Version = 1.5.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”具有间接依赖性,但不能在目前有针对性的框架中解决。 ” .NETPortable,版本= V4.0,外形= Profile158" 。要解决此问题,请删除引用“System.Net.Http”或将应用程序重新定位到包含“System.Runtime,Version = 1.5.11.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”的框架版本。 (MSB3268)(Prototype.Core)

  4. 我做错了什么?为什么我不能使用这样的基本标准库?

    更新

    最后通过切换到Profile 78(.NET 4.5)解决了这个问题。现在我可以使用HttpClient,它更好,更容易使用。它可以满足我的所有要求。 MvvmCross库也适用于Profile 78。

    我唯一的问题是没有Timer类。也许我应该自己使用Task.Delay实现它。

2 个答案:

答案 0 :(得分:4)

我建议通过NuGet http://www.nuget.org/packages/Microsoft.Net.Http/

使用HttpClient包

这适用于配置文件78和MvvmCross。您还可以获得异步/等待支持。

答案 1 :(得分:1)

HttpClient怎么样,我扩展了Profile 7,所以它现在支持WP7 / 8,iOS,Android和WinStore,它运行良好,没有问题,我已经用它完成了几个项目。