Sending Http requests from Xamarin Portable Class Library

二次信任 提交于 2019-12-02 05:18:53

问题


I have quite decent problems with this very simple task and asking for help. The question is: what is the best and the most reliable way to perform Http requests with timeout from Xamarin PCL?

There are several options:

  1. Using old HttpWebRequest. This solution should definitely be working, but I have problems with BeginGetRequestStream method described in this question: HttpWebRequest BeginGetRequestStream callback never called Also it requres some extra ugly code to implement timeouts properly.

  2. HttpClient. HttpClient is not available in PCL out-of-the-box (I am using Profile 158 required by MvvmCross libraries). I was trying to install Microsoft HTTP Client Libraries but I still cannot compile the PCL project, error is:

    The type or namespace name 'Http' does not exist in the namespace 'System.Net' (are you missing an assembly reference?)

  3. PortableRest NuGet package. Same problem - does not seem to work in PCL. Lots of compilation errors and warnings, for example:

    The primary reference "System.Net.Http" could not be resolved because it has an indirect dependency on the framework assembly "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which could not be resolved in the currently targeted framework. ".NETPortable,Version=v4.0,Profile=Profile158". To resolve this problem, either remove the reference "System.Net.Http" or retarget your application to a framework version which contains "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". (MSB3268) (Prototype.Core)

What am I doing wrong? Why am I not able to use such basic standard libraries?

UPDATE

Finally solved the issue by switching to Profile 78 (.NET 4.5). Now I can use HttpClient which is way better and easy to use. It works reliably with all my requests. MvvmCross libraries work fine with Profile 78 as well.

The only issue I have is lack of Timer class. Maybe I should implement it myself using Task.Delay.


回答1:


I recommend using the HttpClient package via NuGet http://www.nuget.org/packages/Microsoft.Net.Http/

This works with profile 78 and MvvmCross. You also get async/await support.




回答2:


What about HttpClient, I've extended Profile 7, so it now supports WP7/8, iOS, Android and WinStore and it works great, no problem yes and I've already complete a couple of projects with it.



来源:https://stackoverflow.com/questions/22583168/sending-http-requests-from-xamarin-portable-class-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!