首页 > 解决方案 > 在 Unity 中使用 HTTP Put json

问题描述

我正在使用UnityWebRequest在服务器上更新(PUT)原始 JSON。不幸的是我得到了错误HTTP/1.1 405 Method Not Allowed。我假设我没有正确编码它。这里可能是什么问题?这是我的同事提出的后续问题:REST API Post 中不允许 HTTP 方法

我们尝试以不同的方式对其进行编码,如下面的脚本所示。不幸的是,它不起作用。我们有这个在线 JSON 并且要输入数据 (PUT),必须将名称和地址字段设置为非空。

IEnumerator Post()
    {
        byte[] myData = System.Text.Encoding.UTF8.GetBytes("{'name': 'User01', 'address':{'raw':'MountFiji'}}");
        UnityWebRequest www = UnityWebRequest.Put("website_of_the_user", myData);
        www.SetRequestHeader("Content-Type", "application/json");
        yield return www.SendWebRequest();
 
        if(www.isNetworkError || www.isHttpError) {
            Debug.Log(www.error);
        }
        else {
            Debug.Log("Upload complete!");
        }
    }
{
    "name": "",
    "address": {
        "raw": ""
    }
}

我们拥有 API 的网页具有以下属性:

HTTP 200 OK
Allow: GET, HEAD, PUT, OPTIONS, DELETE
Content-Type: application/json

标签: c#unity3ddjango-rest-frameworkhttp-get

解决方案


我让它工作了。如果将来有人遇到这个问题,那么解决方案比你想象的要简单。问题在于 JSON 格式代码,\由于数据是字符串,因此给出很重要。这是完整的代码:

            UnityWebRequest www = UnityWebRequest.Put(URL_01, "{\"name\":\"user_01\",\"address\":{\"raw\":\"MountFiji\"}}");
            www.SetRequestHeader ("Content-Type", "application/json");

            yield return www.SendWebRequest();

            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(www.error);
            }
            else
            {
                Debug.Log("Form upload complete!");
            }

推荐阅读