带有第 3 部分 API 的 Unity WebGL

Unity WebGL with 3rd part APIs

我正在开发使用 Unity 制作的 WebGL 应用程序,它将与外部硬件集成。

它们之间的通信由APIs 进行,由第三方公司(负责硬件)发送。他们要求 POST 以空的 JSON 作为正文“{}”发送所有内容。问题是 UnityWebRequest.Post 没有正确格式化 JSON 文件。

该项目与我的本地测试(访问本地 JSON 文件)配合得很好,但是当他们发送最终的 API 主机地址时,我不得不改变 UnityWebRequest.Post 到 .Put,因为 Post 方法没有正确格式化 JSON。更改一些代码后,它可以在编辑器上完美运行。 问题出在浏览器上。

在下面您可以看到我到目前为止所做的尝试:

IEnumerator GetJsonContent(string url)
{
    var request = UnityWebRequest.Put(url, "{}");
    request.method = "POST";

    byte[] bodyRaw = Encoding.UTF8.GetBytes("{}");
    request.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
    request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");

    yield return request.SendWebRequest();

    while (!request.isDone)
    {
        yield return new WaitForEndOfFrame();
    }

    if (request.isNetworkError)
    {
        Debug.Log(request.error);
    }
    else
    {
        var jsonContent = request.downloadHandler.text;

        if (JsonCallback != null)
        {
            JsonCallback(jsonContent);
            JsonCallback = null;
        }
    }

    yield break;
}

除了那个代码,我还试过:

var request = new UnityWebRequest(url, "POST");

代替协程的前两行。

浏览器不断抛出 405 错误,但是 Postman returns 值,但是当我尝试在 Postman 上重现浏览器上的内容时,它说没有 "Body" 被发送。我们从负责 APIs 的公司收到的反馈是我们可能在使用 CORS 时遇到问题。

最奇怪的是它在编辑器上运行良好(具有相同的 API 地址)。

提前致谢。

您需要使用

UnityWebRequest.Post 

而不是 UnityWebRequest.Put

问题已解决。

与CORS(跨源资源共享)有关。由于某种原因,我们的服务器未设置为与他们的服务器通信,因此我们不得不更改服务器中的设置。上面的代码完美运行! :-)