使用 JSON& xAPI 的 Unity C# webRequest
Unity C# webRequest with JSON& xAPI
我在 Unity 中使用 c# 和 UnityWebRequest 实现了一篇 xAPI 测试文章,运行 遇到了一个我似乎无法解决的问题。
当我 Post 到 http://httpbin.org/post 时,我的调用按预期运行并且服务器收到的 JSON 数据也完全符合预期。
当我将端点更改为 https://lrs.adlnet.gov/xapi/(xAPI 语句查看器)时,我调用 return 200 |好的,但不要出现。我已验证端点、身份验证和 JSON 是否合适。 (相同的数据使用 xAPI stringbuilder 以及我自己的 HTML/Javascript 测试文章发送正常。
当我将端点更改为我的 SCORM 云 LRS 端点时,我收到错误 400 | Unknown/Generic HTTP 错误,但没有其他帮助。
Post方法
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 个端点上保持沉默。即使在调试模式下。
根据您作为 "endpoint" 提供的内容,您似乎需要附加您请求的资源,在您的情况下是 /statements
。考虑使用 TinCan.NET 作为一个库,或者至少看看它的实现,因为它是 OSS。 http://rusticisoftware.github.io/TinCan.NET/
我在 Unity 中使用 c# 和 UnityWebRequest 实现了一篇 xAPI 测试文章,运行 遇到了一个我似乎无法解决的问题。
当我 Post 到 http://httpbin.org/post 时,我的调用按预期运行并且服务器收到的 JSON 数据也完全符合预期。
当我将端点更改为 https://lrs.adlnet.gov/xapi/(xAPI 语句查看器)时,我调用 return 200 |好的,但不要出现。我已验证端点、身份验证和 JSON 是否合适。 (相同的数据使用 xAPI stringbuilder 以及我自己的 HTML/Javascript 测试文章发送正常。
当我将端点更改为我的 SCORM 云 LRS 端点时,我收到错误 400 | Unknown/Generic HTTP 错误,但没有其他帮助。
Post方法
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 个端点上保持沉默。即使在调试模式下。
根据您作为 "endpoint" 提供的内容,您似乎需要附加您请求的资源,在您的情况下是 /statements
。考虑使用 TinCan.NET 作为一个库,或者至少看看它的实现,因为它是 OSS。 http://rusticisoftware.github.io/TinCan.NET/