您好我正在尝试实施“PUT”请求将JSON字符串发送到我的服务器,下面是我的代码
public static string PUT (string url, string jsonStr){
string msg = "";
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "PUT";
ServicePointManager.Expect100Continue = false;
using (StreamWriter sw = new StreamWriter(httpWebRequest.GetRequestStream())){
sw.Write(jsonStr);
sw.Flush();
sw.Close();
}
try{
HttpWebResponse response = httpWebRequest.GetResponse() as HttpWebResponse;
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
msg = streamReader.ReadToEnd();
}
}catch(WebException ex){
msg = ex.Message;
}
return msg;
}
现在我可以从我的服务器收到msg,比如“成功!”这很短。但我想知道这个方法是否应该写成协程,并且喜欢“yield return response”或“yield return streamReader.EndofStream()”以确保在从服务器获取所有消息后读取响应。
我正在使用具有自己的Web请求方法的Unity3D - “UnityWebRequest”,它需要“yield return unityWebRequest.send()”等待请求完成。这就是为什么我认为也许HttpWebRequest也需要它。
答案 0 :(得分:3)
HttpWebResponse是否需要yield / coroutine来等待来自的消息 服务器
否强>
但是我想知道这个方法是否应该写成协程并且可以 喜欢"收益率回报"或者"收益率 streamReader.EndofStream()"毕竟确保阅读回复 消息来自服务器。
您可以使用与WWW和UnityWebRequest相关的协同程序/ yiled。您可以了解有关UnityWebRequest here的更多信息。
对于HttpWebResponse
,您必须在另一个Thread
中使用它或使用它的异步版本。 Here就是一个例子。如果你不这样做,那么大多数时候你的游戏都会被冻结,特别是当你收到大量数据时。