我目前正在使用内部API和visual studio(两者都是新手)。我正在尝试向服务器提交GET请求,该请求将为我提供带有用户信息的JSON。预期的JSON响应中的一个字段是connect_status,如果连接完成则显示为true,一旦连接完成则显示false,表示已收到响应。到目前为止,我一直在使用Sleep等待一段时间才能得到响应。
bool isConnected;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost");
request.Method = WebRequestMethods.Http.Get;
request.ContentType = "application/json";
System.Threading.Thread.Sleep(10000);
do
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream receiveStream = response.GetResponseStream();
StreamReader info = new StreamReader(receiveStream);
string json = info.ReadToEnd();
accountInfo user1 = JsonConvert.DeserializeObject<accountInfo>(json);
Console.WriteLine(jsonResponse);
isConnected = user1.connect_status;
}
while (isConnected == true);
问题在于我必须等待更长的时间,所需的时间是可变的,这就是为什么我必须设置更高的睡眠时间。 Alsosomeimtes 10秒可能还不够,在这种情况下do while循环第二次循环时我在while(isConnected == true)处得到异常
NUllReferenceException未处理。对象引用未设置为 对象的实例。
这样做会有更好/不同的方式,因为我认为我的方式并不正确。
答案 0 :(得分:2)
此处有一个选项,如果使用.NET 4.5:
HttpMessageHandler handler = new HttpClientHandler { CookieContainer = yourCookieContainer };
HttpClient client = new HttpClient(handler) {
BaseAddress = new Uri("http://localhost")
};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent content = new StringContent("dataForTheServerIfAny");
HttpResponseMessage response = await client.GetAsync("relativeActionUri", content);
string json = await response.Content.ReadAsStringAsync();
accountInfo user1 = JsonConvert.DeserializeObject<accountInfo>(json);
这样你就可以让.NET来处理等待你的事情。