Unity WebRequest POST提交JSON出现内部服务错误该如何解决
你收到500内部服务错误的核心原因是请求体格式不匹配:Postman中测试通过的是JSON格式请求,但现有代码用WWWForm提交的是表单格式数据,服务端无法解析导致报错。
以下是完整修改后的代码,同时已新增要求的formToken: MyApp参数:
using System.Collections; using UnityEngine; using UnityEngine.Networking; public class SendData: MonoBehaviour { // 定义和请求结构匹配的可序列化类 [System.Serializable] private class RequestValues { public string AppName; public string AppUser; } [System.Serializable] private class PostRequestBody { public RequestValues values; public bool consentAccepted; public string consentToken; public string formToken; } void Update () { // 如果你项目用自定义InputCompat类,这里换回InputCompat.GetKeyDown即可 if (Input.GetKeyDown(KeyCode.P)) { StartCoroutine(FillAndSend()); } } public IEnumerator FillAndSend() { // 构造符合要求的请求数据 var requestData = new PostRequestBody { values = new RequestValues { AppName = "Testttt", AppUser = "Reinnn" }, consentAccepted = true, consentToken = "tz677zuiuis2qEZKo3Lt+kHluOGss", // 你的token值 formToken = "MyApp" // 新增要求的参数 }; // 序列化为JSON字符串 string jsonBody = JsonUtility.ToJson(requestData); // 构造POST请求 UnityWebRequest www = UnityWebRequest.PostWwwForm("https://mywebsite.com/profile/MyApp", jsonBody); // 必须设置请求头指定内容格式为JSON www.SetRequestHeader("Content-Type", "application/json"); // 如果服务端确实需要header带token,取消下一行注释即可 // www.SetRequestHeader("token", "tz677zuiuis2qEZKo3Lt+kHluOGss"); yield return www.SendWebRequest(); // 低版本Unity可以换回原来的isNetworkError/isHttpError判断 if (www.result != UnityWebRequest.Result.Success) { Debug.LogError($"请求失败:{www.error},返回内容:{www.downloadHandler.text}"); } else { Debug.Log($"请求成功:{www.downloadHandler.text}"); } www.Dispose(); } }
补充说明
- 如果你习惯使用Newtonsoft.Json做序列化,直接把
JsonUtility.ToJson替换为JsonConvert.SerializeObject即可,无需给数据类加[Serializable]标签 - 可以通过错误日志里的返回内容,快速定位后续可能出现的参数缺失问题
内容的提问来源于stack exchange,提问作者Rein
相关产品推荐
相关产品推荐

