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

Xamarin.Essentials Screenshot.CaptureAsync() 不适用于视频视图

语音识别不适用于 Android 5.1.1 Xamarin