运行 iPhone 时 RestSharp 与 Unity3d 崩溃

RestSharp is crashing with Unity3d when running on iPhone

我正在尝试将 RestSharp 附加到 Unity3d。 原始 RestSharp 单声道库在编辑器中运行良好,但在设备上它会因调用堆栈而崩溃

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: options
at System.Security.Cryptography.X509Certificates.X509CertificateCollection.GetEnumerator () [0x00000] in <filename unknown>:0 
at System.Text.RegularExpressions.Regex.validate_options (RegexOptions options) [0x00000] in <filename unknown>:0 
at System.Text.RegularExpressions.Regex..ctor (System.String pattern, RegexOptions options) [0x00000] in <filename unknown>:0 
at RestSharp.RestClient..ctor () [0x00000] in <filename unknown>:0 
at RestSharp.RestClient..ctor (System.String baseUrl) [0x00000] in <filename unknown>:0 

这意味着,异常出现在 ctor RestClient(string) 内部,它是默认 ctor 的包装器。在默认构造器内部,有

public RestClient()
    {
#if WINDOWS_PHONE
        this.UseSynchronizationContext = true;
#endif
        this.ContentHandlers = new Dictionary<string, IDeserializer>();
        this.AcceptTypes = new List<string>();
        this.DefaultParameters = new List<Parameter>();

        // register default handlers
        this.AddHandler("application/json", new JsonDeserializer());
        this.AddHandler("application/xml", new XmlDeserializer());
        this.AddHandler("text/json", new JsonDeserializer());
        this.AddHandler("text/x-json", new JsonDeserializer());
        this.AddHandler("text/javascript", new JsonDeserializer());
        this.AddHandler("text/xml", new XmlDeserializer());
        this.AddHandler("*+json", new JsonDeserializer());
        this.AddHandler("*+xml", new XmlDeserializer());
        this.AddHandler("*", new XmlDeserializer());

        this.FollowRedirects = true;
    }

此时,我看不到 Regex ctor 的下一步出现在哪里。有什么想法吗?

我们在使用 Unity 5.2.1 构建独立 Windows 项目时遇到了同样的问题。在编辑器中一切正常,直到您创建一个构建。

我认为问题与 'AddHandler' 方法中使用的 'structuredSyntaxSuffixWildcardRegex' 有关。虽然我不知道它失败的确切原因,但我知道以前版本的 RestSharp 确实适用于我们。

我猜你也在使用最新的 RestSharp 版本,那么你可以试试 RestSharp v105.1.0 吗?

它似乎从 Restshap v105.2.1 开始停止运行,我正在检查提交以查看可能的罪魁祸首。如果找到解决方案,我会 fork 并修复它。

此外,我必须通知您,在我们的案例中,由于缺少 Mono.Posix 库,GZIP 解压缩也无法正常工作。当服务器返回 gzip 响应并且 RestClient 允许时,会发生此问题。我们必须通过使用“Fabman08 的修复程序来解决这个问题,该修复程序使 decompression configurable.

我已经分叉了 RestSharp 存储库,试图解决上述问题和其他与 Unity 相关的问题。它位于:https://github.com/eamonwoortman/RestSharp.Unity.

您的问题和其他问题已得到修复,并针对 64 位独立 Windows 构建进行了测试。

您能否验证这些修复是否也适用于您的 iOS 项目?确保构建 RestSharp.Net35.Unity 项目。