【问题标题】:Unity: Use HTTP PUT in Unity3DUnity:在 Unity3D 中使用 HTTP PUT
【发布时间】:2017-10-21 02:20:08
【问题描述】:

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

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

【问题讨论】:

    标签: rest http unity3d put


    【解决方案1】:

    如果您不是在寻找第 3 方插件并假设您的服务器支持它,那么您可以考虑使用的一种方法是“X-HTTP-Method-Override”HTTP 标头。您的客户端通过 POST 将数据发送到服务器,但服务器将其作为 X-HTTP-Method-Override 标头中的值(例如 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);
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我也检查了 BestHTTP,但我们是学生,正在为毕业做顶点项目。对我们来说,这个价格是个大问题
      • 那么看起来你将不得不使用套接字。 Unity 提供的 WWW 类非常基础,比与 api 接口更适合简单的下载。
      • 对于我的第二个问题。我需要通过 HTTP PUT 发送所有键值对还是只发送我需要更新的对?因为当我使用 Chrome 的 POSTMAN 扩展测试 API 时,它需要我填写所有键值对。如果我只列出需要更新的对,则会发生错误
      【解决方案3】:

      我使用 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);            
          }   
      }
      

      【讨论】:

        猜你喜欢
        • 2021-01-14
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 2019-12-29
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多