在iPhone上运行时,RestSharp与Unity3d崩溃

时间:2015-07-14 13:27:23

标签: c# ios unity3d mono restsharp

我正在尝试将RestSharp附加到Unity3d。 原始的RestSharp mono lib在编辑器中工作正常,但在设备上它与callstack崩溃

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的包装器。在默认的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的下一步出现在哪里。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:1)

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

您和其他问题已经修复,并针对64位独立Windows版本进行了测试。

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