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

时间:2019-01-12 18:36:06

标签: unity3d

  • 我正在使用UnityWebRequest(我的Unity版本为2017.4.0f1)对服务器进行POST api调用
  • 我正在将请求主体中的一些数据元素发送到服务器, 插入我的数据库并返回响应正文,它是json字符串
  • 我正在使用 UnityWebRequest.downloadhandler.text读取响应消息, 但是它是空的,即使数据元素 正在插入我的数据库。 request.downloadHandler.data.Length也给我0
  • 通过相同的电话拨打 邮递员给我适当的回复(使用 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);

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

2 个答案:

答案 0 :(得分:2)

您需要等待结果下载后才能对其进行任何操作。 Web请求是异步的!

通常,您会使用协同程序来执行此操作,例如

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

答案 1 :(得分:0)

正如frankhermes所说,您需要先等待结果下载,然后再执行任何操作

max()

但是,仅上述一行对我不起作用。

=QUERY(
    $A$1:$H$7, 
    "select H where A = date '"& TEXT(
        Query(
             $A$2:$H$7,
             "select max(A) where B = "&A11&" label max(A) ''",
             1
        ),
    "yyyy-MM-dd")&"'",
     0
)