【问题标题】:How to send a PUT request using UnityWebRequest?如何使用 UnityWebRequest 发送 PUT 请求?
【发布时间】:2017-03-09 05:25:34
【问题描述】:

如何使用 UnityWebRequest 发送 PUT 请求?

PUT 正在发送; Uploaded!! 正在打印到控制台。但是,没有任何更新。我想我的格式 myData 不正确。

我尝试将 PUT 发送到的实际 URL 的格式类似于...http://servername.com/api/dogs/1/token=fndskajfdafdsf&cleanliness_level=20

抱歉,我不记得那个格式叫什么了。

这是我的代码:

public string url = "http://servername.com/api/dogs/1";

.
.
.
void Start() {
StartCoroutine (UpdateDogs ("clean"));
}

IEnumerator UpdateDogs (string button)
    {
        byte[] myData;

        if (button == "feed") {
            myData = System.Text.Encoding.UTF8.GetBytes ("?token=" + token + "&health_level=" + healthLevel);

        } else {
            myData = System.Text.Encoding.UTF8.GetBytes ("?token=" + token + "&cleanliness_level=" + cleanlinessLevel);

        }

        using (UnityWebRequest www = UnityWebRequest.Put (url, myData)) {
            yield return www.Send ();

            if (www.isError) {
                Debug.Log ("PUT ERROR: " + www.error);
            } else {
                Debug.Log ("Uploaded!!");
}
}

【问题讨论】:

    标签: c# rest unity5 put unity2d


    【解决方案1】:

    您在标记后的参数字符串中似乎缺少 &。

    token + "cleanliness_level=
    

    应该是

    token + "&cleanliness_level=
    

    对于其他可能的参数也是如此。

    UnityWebRequest.Put 中的myData 仅用于 http 正文数据。看起来你不需要那个。相反,您应该将查询参数添加到 URL,如下所示:

    public string url = "http://servername.com/api/dogs/1";
    
    if (button == "feed") {
        url += "?token=" + token + "&health_level=" + healthLevel;
    } else {
        url += "?token=" + token + "&cleanliness_level=" + cleanlinessLevel;
    }
    
    using (UnityWebRequest www = UnityWebRequest.Put (url, "dummy")) { // UnityWebRequest.Put requires a body, see comments below
        yield return www.Send ();
    
        if (www.isError) {
            Debug.Log ("PUT ERROR: " + www.error);
        } else {
            Debug.Log ("Uploaded!!");
        }
    }
    

    【讨论】:

    • 我注意到令牌前面缺少&?。进行了调整,仍然无法正常工作。我还尝试使用无效的令牌,但没有得到www.error,所以我认为我的 PUT 没有被发送。我想我的困惑在于......我应该在myData 中输入什么?
    • 我认为您应该在 URL 中包含所有内容,而在 myData 中没有任何内容。更改了我的答案以表明它。
    • 当我使用""null 代替myData 时出现错误。错误是:ArgumentException: Cannot create a data handler without payload data 我最终发送了一个随机字符串,例如“Hello”,这似乎奏效了!
    • 太棒了@falafel。我会相应地改变我的答案。这似乎是 UnityWebRequest 的一个限制,尽管 HTTP 规范确实表明 PUT 应该包含一个“封闭实体”,即。一个身体。
    【解决方案2】:

    我认为您在发送令牌时缺少正斜杠。

    尝试调试您实际发送的内容

     Debug.Log (www.text);
    

    下一个建议是,错误可能与您在后端接收数据时使用的代码有关。

    【讨论】:

    • UnityWebReqest 没有text。如何打印发送的 URL?我在 UnityWebRequest 页面上看不到任何适用的内容。
    • 打印www.url.ToString() 给了我http://servername.com/api/dogs/1。这是正确的 URL,但我也有输入 myData 的参数。那是放置它的正确位置吗?我在令牌前添加了/ 以供后代使用,但仍然无法正确发送 PUT。
    • 我对 www 的使用弄错了。我认为它的处理方式类似于:docs.unity3d.com/ScriptReference/WWW.html
    • 问题可能与您在后端接收数据的情况有关。可能有错误
    • 感谢您的 cmets。它不是后端;我们测试了我们的 API,它可以正确地获取 PUT 并更新数据。
    猜你喜欢
    • 2019-12-12
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多