1

我目前正在使用内部 API 和视觉工作室(对他们来说都是新的)。我正在尝试向服务器提交一个 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 seconds 可能还不够,在这种情况下,当 do while 循环第二次循环时,我在 while(isConnected==true) 处遇到异常说

NUllReferenceException 未处理。你调用的对象是空的。

什么会是更好/不同的方法,因为我认为我正在做的方式不正确。

4

1 回答 1

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 为您处理等待等问题。

于 2013-07-18T21:55:05.727 回答