【问题标题】:HttpWebRequest always show the same result C#HttpWebRequest 总是显示相同的结果 C#
【发布时间】:2014-04-04 08:48:12
【问题描述】:

首先感谢您的帮助。我有一个让我发疯的问题...

事实上,我在我的 Web 服务中发出了一个 GET 请求,并且它运行良好,有一次。 如果我之后执行相同的请求,则该请求不会到达我的 Web 服务。我收到的结果与第一个相同......这是一个错误,因为我在两个请求之间进行了一些更新。预期的结果不同。如果我在 windows phone 上重新启动应用程序,结果会更新。
就我而言,目标是获取我的联系人的位置。尽管我更新了他们的职位,但我收到了相同的职位。

        private void Button_Click(object sender, RoutedEventArgs e)
    {
        System.Uri targetUri = new System.Uri("http://My-Ip-Address:8080/WhereAreMyFriends/webresources/positions/getMyContactsPositions/0660066000");
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
        request.Method = "GET";
        request.Accept = "application/xml";
        request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
    }

    private void ReadWebRequestCallback(IAsyncResult callbackResult)
    {
        try
        {
            HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
            HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);

            if (myResponse.StatusCode == HttpStatusCode.OK)
            {
                using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
                {
                    string results = httpwebStreamReader.ReadToEnd();
                    Dispatcher.BeginInvoke(() =>
                    {
                        MessageBox.Show(results);//NavigationService.Navigate(new Uri("/CodeVerification.xaml", UriKind.Relative));
                    });
                }
                myResponse.Close();
            }
            else
            {
                Dispatcher.BeginInvoke(() =>
                {
                    MessageBox.Show("Status Code incorrect");
                    myResponse.Close();
                });
            }
        }
        catch (Exception e)
        {
            Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show(e.Message);
            });
        }
    }

【问题讨论】:

  • 对我来说听起来像是缓存。在 URL 中添加随机参数或设置:response.setHeader("Cache-Control", "no-cache");
  • 是的,谢谢,现在效果更好了:)

标签: c# web-services get windows-phone httpwebrequest


【解决方案1】:

这是一个缓存问题。在您的 Url 中添加“&random="+DateTime.Now.Ticks" 代码可以解决您的问题。

private void Button_Click(object sender, RoutedEventArgs e)
     {
        System.Uri targetUri = new System.Uri("http://My-Ip-Address:8080/WhereAreMyFriends/webresources/positions/getMyContactsPositions/0660066000"+"&random="+DateTime.Now.Ticks);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
        request.Method = "GET";
        request.Accept = "application/xml";
        request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
     }

另一种方法是

private void Button_Click(object sender, RoutedEventArgs e)
         {
            System.Uri targetUri = new System.Uri("http://My-Ip-Address:8080/WhereAreMyFriends/webresources/positions/getMyContactsPositions/0660066000");
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(targetUri);
            request.Headers[HttpRequestHeader.CacheControl] = "no-cache"; 
            request.Headers[HttpRequestHeader.Pragma] = "no-cache"; 
            request.Headers[HttpRequestHeader.IfModifiedSince] = dateTime.Now.ToString();
            request.Method = "GET";
            request.Accept = "application/xml";
            request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
         }

request.Headers[HttpRequestHeader.IfModifiedSince] = dateTime.Now.ToString(); 这会迫使您的请求始终被执行 - 这对我来说是个窍门。

【讨论】:

  • 真是个好主意!有用 !第二个想法对我来说是最好的。聪明的 !谢谢贾辛德
猜你喜欢
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多