如何等待服务器成功响应HTTP请求

时间:2013-07-18 21:44:43

标签: c# visual-studio api http httpwebrequest

我目前正在使用内部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未处理。对象引用未设置为   对象的实例。

这样做会有更好/不同的方式,因为我认为我的方式并不正确。

1 个答案:

答案 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来处理等待你的事情。