【问题标题】:Xamarin IOS - HttpClient - API working on one iPad and not anotherXamarin IOS - HttpClient - API 在一台 iPad 而不是另一台上工作
【发布时间】:2018-08-22 06:18:50
【问题描述】:

我正在使用“https://www.******pi.********^$%.org.uk”,它在一个 iPAD 上工作,而在另一个 iPAD 上不工作。我有相同的配置设备(软件和硬件)。我连接到同一个网络。

API 调用已使用 HttpClient 类完成。它在 Android 中运行良好。

此 API 调用适用于某些 iPad,但不适用于具有相同操作系统和配置的某些 iPad。这是 iOS 设备上的随机行为,无法得出任何结论。

我正在开发 Xamarin Native 并尝试了以下解决方案但没有成功 -

https://medium.com/outsystems-engineering/installing-a-valid-certificate-on-a-dev-server-433e499260fe

Connect to a Server with Invalid Certificate using NSURLSession (swift2,xcode7,ios9)

Trust a self signed certificate using Httpclient

System.Net.ServicePointManager.ServerCertificateValidationCallback = 委托{返回真; };

以下是我遇到的问题 -

{System.Net.WebException:此服务器的证书无效。 您可能正在连接到假装的服务器 “**&^&^&%^.(&^(&^^&.org.uk”) 有风险的信息。 ---> Foundation.NSErrorException:异常 类型“Foundation.NSErrorException”被抛出。 --- 内部结束 异常堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:152 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x00037] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task 任务) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 在 System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] 在 /Library/Frameworks/Xamarin.iOS.framework/Versions/11.12.0.4/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:535 在 System.Net.Http.NSUrlSessionHandler+d__29.MoveNext () [0x001c3] 在 /Users/builder/data/lanes/5944/64fece5f/source/xamarin-macios/src/Foundation/NSUrlSessionHandler.cs:202

感谢任何帮助。

【问题讨论】:

  • 所有设备都使用相同的iOS版本吗?另外,我会将您正在使用的代码添加到您的问题中(即使用带有 Xamarin 的 NSUrlSessionHandler 的自定义 NSUrlSession,或者......)您是否直接使用 NSUrlSession 而不是 HttpClient 来排除 Xamarin 作为问题?最后,避免一起使用自签名证书是要走的路……SSL证书是免费提供的……;-)
  • 检查 iPad 上的日期和时间。如果时钟过于倾斜,那么 TLS 协商将失败
  • @Sushi 我试过使用 NURLSession 但它不起作用。
  • @Paulw11 我已经检查过了。没错

标签: ios ssl xamarin certificate


【解决方案1】:

“此服务器的证书无效。” 您必须在服务器上安装受信任的证书。

另一种选择是将其放入 AppDelegate 中: System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

它将有效地忽略证书验证过程(但不建议用于生产!)

【讨论】:

  • 我也试过这个,但我得到了同样的错误。我正在使用 HTTPClient 第三方库。
  • 接下来研究如何安装正确的证书
  • 问题不在于证书。它适用于完美的一些 iPad。如果证书有问题,它就不会起作用。此外,它还可以在 Internet Explorer 中的 Windows 机器上运行。
猜你喜欢
  • 1970-01-01
  • 2015-07-23
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多