【问题标题】:UnityWebRequest POST not sending BodyUnityWebRequest POST 不发送正文
【发布时间】:2021-06-28 00:10:13
【问题描述】:

正如标题所说,代码如下。我尝试设置 chunkedTransfer=false、Content-Type application/json、WWForm、手动构建 JSON 对象和 HttpClient。对于 Content-Type application/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 "";
        }

【问题讨论】:

    标签: c# unity3d unitywebrequest


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 感谢您的回复!我也确实尝试过,我忘了包括它。同样的问题。编辑:更新以包括 JSON 对象手动创建尝试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多