Unity C#webRequest with JSON& XAPI

时间:2018-02-19 21:11:07

标签: c# unity3d webrequest tin-can-api

我正在使用带有UnityWebRequest的c#在Unity中实现xAPI测试文章,并遇到了一个我似乎无法解决的问题。

当我发布到http://httpbin.org/post我的调用按预期运行时,服务器收到的JSON数据也完全符合预期。

当我将端点更改为https://lrs.adlnet.gov/xapi/(xAPI语句查看器)时,我的调用返回200 |好的,但不要出现。我已经验证了端点,身份验证和JSON是否合适。 (使用xAPI stringbuilder以及我自己的HTML / Javascript测试文章,相同的数据发送正常。

当我将端点更改为我的SCORM云LRS端点时,我收到错误400 |未知/通用HTTP错误,但没有其他任何有用的。

的PostMethod

public static IEnumerator IPostLRSData(string jsonData, string authKey, string endpoint, Action<string> callback = null) {
        UnityWebRequest request = new UnityWebRequest(endpoint, UnityWebRequest.kHttpVerbPOST);
        //byte[] bodyRaw = new UTF8Encoding().GetBytes(jsonData);
        //byte[] bodyRaw = new ASCIIEncoding().GetBytes(jsonData);
        byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonData);

        request.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
        request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

        request.SetRequestHeader("Authorization", authKey);
        request.SetRequestHeader("X-Experience-API-Version", xAPIUtils.XAPI_VERSION);
        request.SetRequestHeader("Content-Type", "application/json");

        yield return request.Send();

        if(request.isNetworkError || request.isHttpError) {
            Debug.LogWarning(request.error);
        } else {
        // Show results as text
            Debug.LogWarning(request.downloadHandler.text);
        }

        callback(request.responseCode + " | " + request.error);
    }

作为一个疯狂的最后一次尝试,我移植了一个github线程WebRequest示例,并将其定制到我的项目,并使用它我得到与上面类似的结果,除了它与最后2个端点沉默。即使在调试模式下也是如此。

1 个答案:

答案 0 :(得分:1)

根据您提供的&#34;端点&#34;看起来您需要附加您请求的资源,在您的情况下它将是/statements。考虑使用TinCan.NET作为库,或者至少查看它的实现,因为它是OSS。 http://rusticisoftware.github.io/TinCan.NET/