Unity:在 Unity3D 中使用 HTTP PUT

Unity: Use HTTP PUT in Unity3D

我是 Unity 的新手,在 Unity 中遇到了一些关于 RESTFul 的问题。 我想通过 HTTP PUT 更新服务器上的一些数据,但是正如我在网上搜索时收到的,Unity 中的 WWWW class 不支持 HTTP PUT。我还尝试了一些与 HTTP PUT 相关的 HttpWebRequest 示例,但总是收到错误代码 400:错误请求。

我该如何解决这个问题? 更新时是必须列出所有的键值对还是只需要列出要更改值的键值对?

我建议查看 BestHTTP package 而不是默认的 WWW class。它很便宜(与游戏行业中典型的中间件价格相比,几乎所有 Unity3d 资产都很便宜)而且根据个人经验判断,它相当不错。

或者,您可以使用标准 .NET sockets

我使用 HttpWebRequest

通过以下代码使其工作
void updatePlayer(){
    var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://yourAPIUrl");
    httpWebRequest.ContentType = "text/json";
    httpWebRequest.Method = "PUT";

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
        string json = "{" +
            "'ID': '100'," +
            "'ClubName': 'DEF'," +
            "'Number': 102," +
            "'Name': 'AnNT'," +
            "'Position': 'GK'," +
            "'DateOfBirth': '2010-06-15T00:00:00'," +
            "'PlaceOfBirth': 'Hanoi'," +
            "'Weight': 55," +
            "'Height': 1.55," +
            "'Description': 'des'," +
            "'ImageLink': 'annt.png'," +
            "'Status': false," +
            "'Age': '12'" +
            "}";            
        streamWriter.Write(json);
    }
    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        var responseText = streamReader.ReadToEnd();
        //Now you have your response.
        //or false depending on information in the response
        Debug.Log(responseText);            
    }   
}

如果您不是在寻找第 3 方插件并假设您的服务器支持它,那么您可以考虑使用的一种方法是 "X-HTTP-Method-Override" HTTP header。您的客户端通过 POST 将数据发送到服务器,但服务器将其处理为 X-HTTP-Method-Override header 中的值(例如 PUT)。

我以前在我们的服务器支持它的地方使用过它,效果很好。在 Unity3d 中使用它的一个例子是:

string url = "http://yourserver.com/endpoint";
byte[] body = Encoding.UTF8.GetBytes(json);    

Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add( "Content-Type", "application/json" );
headers.Add( "X-HTTP-Method-Override", "PUT" );
WWW www = new WWW(url, body, headers);