UnityWebRequest POST 不发送正文

问题描述

正如标题所说,代码如下。我尝试设置 chunkedTransfer=false、Content-Type application/json、WWWForm、手动构建 JSON 对象和 HttpClient。对于 Content-Type 应用程序/json,API 甚至没有被命中。其余的,身体是一个空的对象。通过 StackOverflow、YouTube、Unity 文档和所有其他资源,我不知道这里的问题是什么。

截至今天早上,我正在使用 Newtonsoft.Json 来序列化 JSON 正文。我认为现在最大的问题是,当我设置 webRequest.SetRequestHeader("Content-Type","application/json"); 时,API 路由甚至没有收到请求。

async Task<string> makeRequest()
        {
            string url = API_BASE + "/users"; 
            
            Dictionary<string,string> body = new Dictionary<string,string>();
            body.Add("username",username);
            body.Add("password",password);
            body.Add("email",email);

            using (UnityWebRequest webRequest = UnityWebRequest.Post(url,JsonConvert.SerializeObject(body)))
            {
                await webRequest.SendWebRequest();

                string result = Encoding.UTF8.GetString(webRequest.downloadHandler.data);

                if (webRequest.result != UnityWebRequest.Result.Success)
                {
                    JSONNode error = JSON.Parse(result);

                    registerandLoginError.GetComponent<Text>().text = error["error"]["message"];
                    registerandLoginError.SetActive(true);

                    return "";
                }
            }

            BasicLogin();
            return "";
        }

解决方法

内置JsonUtility 不支持Dictionary它遵循与Inspector相同的序列化规则,请参阅Script Serialization

=> JsonUtility.ToJson(body) 只会返回 "" 或最好的情况是 "{}"

尝试“手动”创建 JSON 字符串,例如

var json = "{\"username\":\""+username+"\",\"password\":\""+password+"\",\"email\":\""+email+"\"}";

或使用不同的库,例如Newtonsoft .NET Json(可用作 Package via the PackageManager),支持集合和字典的直接(反)序列化。

,

所以我在其他地方看到过这个解决方案,但我继续忽略它,因为它很笨拙,似乎应该解决。但是,我现在不在乎。

  1. 使用 UnityWebRequest.Put 而不是 UnityWebRequest.Post
  2. 设置webRequest.method = "POST";
  3. 设置webRequest.SetRequestHeader("Content-Type","application/json");

这行得通,但感觉真的很糟糕,没有任何意义。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...