【问题标题】:HttpClient doesn't work on Xamarin iOS releaseHttpClient 不适用于 Xamarin iOS 版本
【发布时间】:2018-07-17 08:34:06
【问题描述】:

我一直在苦苦挣扎,因为当我尝试使用 HttpClient 进行 HTTP Get 或 Post 时,我的 iOS Xamarin Release 版本似乎只是挂起。由于似乎有很多人有很多不同的问题,我在下面分享了我的研究结果以及各种可能的解决方案。

【问题讨论】:

  • 如下所述,我认为您的回答受到了不公平的惩罚。但是,您的 question 可能需要一些工作,并且有被关闭的风险。而不是说“不起作用”和“似乎只是挂起”,具体说明您遇到的问题,最好包含一些代码。并且,用伟大的 Alex Trebek 的话来说,请以问题的形式陈述。
  • 示例代码有助于说明问题,并帮助有此问题的其他人找到您的(好的)答案。

标签: xamarin xamarin.forms xamarin.ios dotnet-httpclient


【解决方案1】:

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

  1. 确保引用了正确的 HttpClient

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

  1. 在 iOS 项目设置中选择正确的 HttpClient 实现

2018 年 5 月左右,SDK 和 Xamarin 平台都推出了新版本,在 Project Build Options 中添加了 HttpClient 实现选项。请务必根据this 文章选择适当的实现。

  1. 确保您使用的是 HTTPS

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

重要提示:我最初在我的项目中进行了完整的查找/替换,以将我的 http:// 网址更改为 https://。问题是这也会更改 XAML 设计器文件中引用的架构的 URL(这会导致它们无法构建)。设计器文件中架构选项中的所有 URL 都需要保持生成状态(使用 http)。

  1. 检查线程阻塞问题

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

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

【讨论】:

  • 为什么这是一个答案?这应该是您问题的一部分
  • 抱歉,我以为这是你研究的一部分。不过,我觉得作为博客文章或其他内容会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多