HttpClient 不适用于 Xamarin iOS 版本
Posted
技术标签:
【中文标题】HttpClient 不适用于 Xamarin iOS 版本【英文标题】:HttpClient doesn't work on Xamarin iOS release 【发布时间】:2018-07-17 08:34:06 【问题描述】:我一直在苦苦挣扎,因为当我尝试使用 HttpClient 进行 HTTP Get 或 Post 时,我的 ios Xamarin Release 版本似乎只是挂起。由于似乎有很多人有很多不同的问题,我在下面分享了我的研究结果以及各种可能的解决方案。
【问题讨论】:
如下所述,我认为您的回答受到了不公平的惩罚。但是,您的 question 可能需要一些工作,并且有被关闭的风险。而不是说“不起作用”和“似乎只是挂起”,具体说明您遇到的问题,最好包含一些代码。并且,用伟大的 Alex Trebek 的话来说,请以问题的形式陈述。 示例代码有助于说明问题,并帮助有此问题的其他人找到您的(好的)答案。 【参考方案1】:以下是您应该注意的几件事:
-
确保引用了正确的 HttpClient
我发现这是最常见的问题。对于使用 .net 客户端的用户,您需要确保 System.Net.Http 被明确引用并包含在您的项目中。
-
在 iOS 项目设置中选择正确的 HttpClient 实现
2018 年 5 月左右,SDK 和 Xamarin 平台都推出了新版本,在 Project Build Options 中添加了 HttpClient 实现选项。请务必根据this 文章选择适当的实现。
-
确保您使用的是 HTTPS
在上面的文章中,您将看到 Apple 向开发人员施加了很大压力,要求他们在进行网络连接时使用安全协议。代码中的所有 HttpGet 和 HttpPost 方法都需要使用安全协议。我发现与我的 http API 的连接被阻止并一直挂在我的发布版本上,但是当我切换到 https 时一切正常。这些连接还需要 TLS1.2 或更高版本。
重要提示:我最初在我的项目中进行了完整的查找/替换,以将我的 http:// 网址更改为 https://。问题是这也会更改 XAML 设计器文件中引用的架构的 URL(这会导致它们无法构建)。设计器文件中架构选项中的所有 URL 都需要保持生成状态(使用 http)。
-
检查线程阻塞问题
在使用 GetAsync 之类的方法时,您可能会发现在使用 Task.Wait 或 Task.Result 时该方法无休止地挂起。为了防止这种情况,请改用它:
await client.GetAsync(uri).ConfigureAwait(false)
【讨论】:
为什么这是一个答案?这应该是您问题的一部分 抱歉,我以为这是你研究的一部分。不过,我觉得作为博客文章或其他内容会更好。以上是关于HttpClient 不适用于 Xamarin iOS 版本的主要内容,如果未能解决你的问题,请参考以下文章
Windows 身份验证不适用于 HttpClient [重复]
IsClippedToBounds 不适用于 xamarin 形式
Xamarin.Forms FlyoutPage 不适用于 Prism
Xamarin.Forms WebView 不适用于 WebRTC