带有第 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(跨源资源共享)有关。由于某种原因,我们的服务器未设置为与他们的服务器通信,因此我们不得不更改服务器中的设置。上面的代码完美运行! :-)
我正在开发使用 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(跨源资源共享)有关。由于某种原因,我们的服务器未设置为与他们的服务器通信,因此我们不得不更改服务器中的设置。上面的代码完美运行! :-)