【发布时间】:2021-12-10 21:34:34
【问题描述】:
我想将一个 JSON 文件从我的 Unity 应用程序发送到我的 Laravel 后端。我的发帖请求似乎有问题,但我不知道是什么问题。
使用 Unity 发送请求
public void SendRequest()
{
// serializable struct
OfferData data = new OfferData(OfferSize.JUMBO, OfferType.AD, 50, 10);
StartCoroutine(RequestHandler.Post(API_URL + "shop/store", JsonUtility.ToJson(data), (response) =>
{
if (response == null)
{
return;
}
// success
Debug.Log(response);
}));
}
JSON:
{
"size":3,
"type":1,
"gold":50,
"gems":10
}
RequestHandler中的post函数:
public static IEnumerator Post(string uri, string data, Action<string> response)
{
UnityWebRequest webRequest = UnityWebRequest.Post(uri, data);
webRequest.SetRequestHeader("Content-Type", "application/json");
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
{
Error(webRequest.error);
response(null);
}
else
{
response(webRequest.downloadHandler.text);
}
}
如果我使用 Laravel 发送 UnityWebRequest 将发送成功响应,但是,打印的数组(见下文)只是空的。 Laravel 无法对 JSON 进行编码。
在 Laravel 中接收请求
这是在我的控制器函数中访问 HTTP Post 请求的地方:
public function store(Request $request)
{
Log::debug($request->json()->all());
}
使用 Postman 时会产生预期的结果:
array ('size' => 3, 'type' => 1, 'gold' => 50, 'gems' => 10)
使用 Unity 发送具有相同 JSON 的类似请求:
array ()
当我使用$request->getContent() 时,我实际上可以看到我的数据。为什么数组是空的?
成功的请求头
从 Postman 发送的请求头:
{
"content-type": "application/json",
"user-agent": "PostmanRuntime/7.21.0",
"accept": "*/*",
"cache-control": "no-cache",
"postman-token": "d8f323fc-f2c8-49b8-a023-2955122fa20e",
"host": "127.0.0.1:8000",
"accept-encoding": "gzip, deflate",
"content-length": "119",
"cookie": "XSRF-TOKEN=eyJpdiI6IkRyU1RqSkppcVdyUmpuVHI2Ym55XC9RPT0iLCJ2YWx1ZSI6ImQrc1QrOTcyWE1GSXM3SGQrVlBsTG1lZ0dXd1FCQlRPellTQm83Z0FkWFc0UktjUW9PNHRqS3B3Z2Rya1ZZS2IiLCJtYWMiOiIxMmNlZTFiODc2MTlmNmVhYjI3ZGI1MTQ1NTM2MGFjODQ4YjZhNzdlMmM4NWQwM2NiYzk1MjkzYzNiYjBmNTA5In0%3D; recludo_session=eyJpdiI6ImFLcUdCdU1WU2JzazNEaEFyaGoxbnc9PSIsInZhbHVlIjoiT1VtNzl4XC9HMW5reTdKUGNDdlBXMVdLK3hMNFR3Q2JxMzA1RVY3NWdVdmV5akJhbnBKeU9YdU5JSmdPdGYyNWUiLCJtYWMiOiI4MWJjOGVhMTcxNDI3M2VjNTU0MDc3NmNkZDU0NjZlMzhmYWI1MjRlZGNlZjhhNGEyNmNjMmY3YThiMzAyODNhIn0%3D",
"connection": "keep-alive"
}
请求标头错误
从 Unity 发送的请求头:
{
"host": "127.0.0.1:8000",
"user-agent": "UnityPlayer/2019.2.8f1 (UnityWebRequest/1.0, libcurl/7.52.0-DEV)",
"accept": "*/*",
"accept-encoding": "deflate, gzip",
"cookie": "XSRF-TOKEN=eyJpdiI6IlJhZE52emU1Z3hYUnVOWmtMbEdZa0E9PSIsInZhbHVlIjoibkdabkhZVnM1ZUYwSklvMzYrSHVLQ0Q5Y2NvRlVTMEhJOHpqMGFCSEZLZVQwd2NnT3NrUmNrXC9cL2Z4XC92M0J0QSIsIm1hYyI6Ijg4ZDUwZDQ4MWQ3OWM3ZjNlOTcxOWE3NzMxYjI1MmQ3NGQ2YzgwMWQ2MDE2YTQ5NTI3NWQ3MTg2ODM4NjMxY2UifQ%3D%3D; recludo_session=eyJpdiI6InoyMktDN3ByR1hYR0tHWCtvdmhOckE9PSIsInZhbHVlIjoiamZJVnlDbVYwZkdBU1wvMXhMeG1sWU5LdDY0d0NnQ0VucE1OK05UNDhUOG1Ya2o5ZUJIcFdaSktuakcrQjJqN1QiLCJtYWMiOiI1YTc5YTE5NDNhNjY5NWRlYzlmMDlkOGIyMWRiYTAzYzMwZTkwNzAzYjBhNTA2OGViOTUyOTlkYzMzYWJlMjA3In0%3D",
"content-type": "application/json",
"x-unity-version": "2019.2.8f1",
"content-length": "215"
}
我错过了什么?如果您需要更多信息,请告诉我。
【问题讨论】:
-
那么在 Unity 中执行此操作时究竟发生了什么?您可以为此添加收到的输出吗?还请添加您将 json
data传递给方法的具体方式和内容 -
@derHugo 感谢您的评论!我添加了如何传递和序列化数据的代码。当我用
$request->getContent()打印收到的请求时,我可以看到我的数据实际上在这里,即使我的数组是空的!! -
请补充:
OfferData是什么。您的 JSON 在 Unity (Debug.Log(JsonUtility.ToJson(data, true));) 中的外观如何? -
@derHugo 我添加了 JSON
标签: c# json laravel http unity3d