HttpClient 不适用于 Xamarin iOS 版本

HttpClient doesn't work on Xamarin iOS release

我已经苦苦挣扎了一段时间,因为我的 iOS Xamarin Release 构建似乎只是在我尝试使用 HttpClient 进行 HTTP Get 或 Post 时挂起。似乎有很多人有很多不同的问题,我在下面分享了我的研究结果和各种可能的解决方案。

以下是您应该注意的几件事:

  1. 确保引用了正确的 HttpClient

我发现这是最常见的问题。对于那些使用 .net 客户端的用户,您需要确保 System.Net.Http 被明确引用并包含在您的项目中。

  1. Select iOS 项目设置中正确的 HttpClient 实现

2018年5月左右,SDK和Xamarin平台都引入了新版本,在Project Build Options中增加了HttpClient实现选项。请务必根据 this 文章选择合适的实施方式。

  1. 确保您使用的是 HTTPS

在上面的文章中,您将看到 Apple 对开发人员施加很大压力,要求他们在进行网络连接时使用安全协议。代码中的所有 HttpGet 和 HttpPost 方法都需要使用安全协议。我发现与我的 http API 的连接被阻止并一直挂在我的发布版本上,但是当我切换到 https 时一切正常。这些连接还需要 TLS1.2 或更高版本。

重要提示:我最初在我的项目中做了完整的 find/replace 以将我的 http:// URL 更改为 https://。问题是这也会更改 XAML 设计器文件中引用的模式的 URL(这会导致它们无法构建)。设计器文件中模式选项中的所有 URL 都需要保持生成时的状态(使用 http)。

  1. 检查线程阻塞问题

在使用像 GetAsync 这样的方法时,您可能会发现在使用 Task.Wait 或 Task.Result 时该方法会无休止地挂起。为防止这种情况,请改用:

await client.GetAsync(uri).ConfigureAwait(false)