无法让 HttpClient 与 PCL 一起使用

Posted

技术标签:

【中文标题】无法让 HttpClient 与 PCL 一起使用【英文标题】:Cannot get HttpClient working with PCL 【发布时间】:2016-11-14 16:02:09 【问题描述】:

我正在努力在我的项目中使用 HttpClient 库。

我不知道发生了什么......

我尝试了本地 URL、在线示例,甚至在 Xamarin.Forms 页面上也没有。它只是不起作用,我无法弄清楚我在这里做错了什么。

这是代码:(取自这里,顺便说一句:https://github.com/conceptdev/xamarin-forms-samples/blob/master/HttpClient/HttpClientDemo/Earthquake/GeoNamesWebService.cs)

永远不会命中第二个断点。

这是我的参考资料部分:

我尝试像在一些示例中看到的那样手动插入 System.Net.Http,但它也不起作用:

有什么想法吗?

编辑

添加更多信息。如果我使用本地服务器并在那里设置断点,它也永远不会被命中。看起来请求永远不会“离开”应用程序。我认为这可能与无法添加System.Net.Http 有关。但我不知道……这真的让我很紧张……

等待解决:

提琴手:

#   Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
3675    200 HTTP    api.geonames.org    /earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=bertt  1,232   no-cache    application/json;charset=UTF-8  windowsformsapplication1.vshost:18544           

目标:

【问题讨论】:

如果你替换'var地震Json = response.Content.ReadAsStringAsync().Result;'会发生什么用 'var 地震Json = await response.Content.ReadAsStringAsync();' ? @DimitrisTavlikos 同样的事情,第二个 BP 永远不会被击中。请用代码检查我的更新答案。 好的,我看到了你的改变,但是为什么你仍然试图用“.Result”得到结果,而不是只是等待? @DimitrisTavlikos 没有理由,只是我正在运行一些疯狂的测试试图弄清楚。但即使我等待return await earthquakesJson;,它仍然永远不会到达第二个 BP。 刚刚测试了你的代码,它在这里工作。 Xamarin Studio,Mac 上的 Xamarin.Forms PCL。我认为你应该检查你的 PCL 个人资料。 【参考方案1】:

此时这是更多的故障排除,因为有很多事情可能会出错。

    下载 Fiddler,并尝试在自己中输入 url 以查看是否收到响应。

    清理您的解决方案,然后重新构建。

【讨论】:

我这样做了,提琴手说它正在返回数据。从昨天开始,我已经清理和重建了好几次......你有什么想法吗? 感谢您提到提琴手。它帮助我弄清楚了问题所在。我仍然无法调试,但至少现在我可以接收数据了。【参考方案2】:

我强烈建议检查 Flurl 而不是 HTTPClient。

这里是 nuget 包 [这里] (https://www.nuget.org/packages/Flurl.Http/)

以及documentation的链接

获取结果并解析它们非常简单,尤其是使用 Json:

T poco = await "http://api.foo.com".GetJsonAsync<T>();

【讨论】:

【参考方案3】:

您是否尝试过添加来自 microsoft 的 nuget 组件 HttpClient。您需要它才能使用 PCL

https://www.nuget.org/packages/Microsoft.Net.Http/

【讨论】:

是的,如果您查看我的参考资料部分,...Primitives 和 ...Extensions 来自该库。只是没有显示的 System.Net.Http。

以上是关于无法让 HttpClient 与 PCL 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin PCL 项目中的 HttpClient 访问失败

连接保持活动在某些主机上无法与 System.Net.Http.HttpClient 一起使用

与 IMediatR 库一起使用时无法在类型化客户端中注入 HttpClient

在 PCL 中使用 HttpClient 进行异步调用

参数匹配不能与 NSubstitute 一起正常工作

HttpClient 不可用共享库项目 Xamarin