UnityWebRequest.downloadHandler.text为空,尽管POST方法返回响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnityWebRequest.downloadHandler.text为空,尽管POST方法返回响应相关的知识,希望对你有一定的参考价值。

  • 我正在使用UnityWebRequest对我的服务器进行POST api调用(我拥有的Unity版本是2017.4.0f1)
  • 我正在请求体中的一些数据元素发送到服务器,它插入我的数据库并返回一个响应体,这是一个json字符串
  • 我正在使用UnityWebRequest.downloadhandler.text来读取响应消息,但它是空的,尽管数据元素已插入到我的数据库中。 request.downloadHandler.data.Length也给了我0
  • 通过Postman进行相同的调用会返回相应的响应(使用HTTPWebRequest并通过流读取器读取响应也是如此)

这是我拥有的代码片段:

UnityWebRequest request=new UnityWebRequest(endpoint,"POST");
request.SetRequestHeader("Content-Type","application/json");
request.SetRequestHeader("host",host);
request.SetRequestHeader("X-Amz-Date",dateTime);
request.SetRequestHeader("Authorization",authorizationHeader);

request.uploadHandler=(UploadHandler)new 
UploadHandlerRaw(Encoding.UTF8.GetBytes(requestParameter));

request.chunkedTransfer=false;
request.downloadHandler=new DownloadHandlerBuffer();
request.SendWebRequest();
print(request.downloadHandler.text);

请告知我在这里做错了什么.....

答案

您需要等待结果下载,然后才能对其执行任何操作。 Webrequests是异步的!

通常,您可以使用Coroutine来执行此操作,例如

public IEnumerator LoadData()
{
    // ......
    // all your code goes here, up to the SendWebRequest line

    // then you yield to wait for the request to return
    yield return request.SendWebRequest();

    // after this, you will have a result
    print(request.downloadHandler.text);
}

像这样开始这个协程:

StartCoroutine(LoadData());

回答这个问题的更多例子:Sending http requests in C# with Unity

以上是关于UnityWebRequest.downloadHandler.text为空,尽管POST方法返回响应的主要内容,如果未能解决你的问题,请参考以下文章