【问题标题】:Get the same response得到相同的响应
【发布时间】:2013-09-10 14:33:36
【问题描述】:

我是 windows phone 8 开发的新手。我正在尝试异步获得响应。上次我使用this method 得到响应。在我的代码中是这样的:

 public async void StartButton_Click(object sender, RoutedEventArgs e)
    {
        cc = new CookieContainer();
        String url = "http://???/play/multi";
        String sss = await createHttpRequestMulti(url); //1st
        url = "http://???/play/check";
        sss = await createHttpRequestMulti(url); //2nd
        while (!sss.StartsWith("["))
            sss = await createHttpRequestMulti(url);
    }
   private async Task<string> createHttpRequestMulti(string url)
    {
        var myHttpRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));
        myHttpRequest.Method = "GET";
        myHttpRequest.AllowAutoRedirect = true;
        myHttpRequest.CookieContainer = cc;
        var response = (HttpWebResponse)await myHttpRequest.GetResponseAsync();
        var reader = new StreamReader(response.GetResponseStream());
        string responseString = await reader.ReadToEndAsync();
        response.Close();
        reader.Close();
        return responseString;
    }

GetResponseAsync 看起来像:

        public static Task<WebResponse> GetResponseAsync(this WebRequest request)
    {
        return Task.Factory.FromAsync<WebResponse>(
            request.BeginGetResponse, request.EndGetResponse, null);
    }

只有在我第一次使用 StartButton_Click 时一切正常。在第二次第一个请求工作正常,但第二个请求甚至不发送请求(我正在使用提琴手),但说,他做到了。结果,我得到了第一个请求的结果。请帮帮我。

【问题讨论】:

  • 也许它正在缓存结果。尝试设置您的请求的CachePolicy,这样它就不会缓存。 (仅供参考,我只是在这里猜测;我不必专门处理这个问题)
  • 正如克里斯所说,缓存可能是原因。尝试在查询字符串的末尾附加一个随每个请求更改的值,如下所示: String url = "http://???/play/multi?disablecache=" + Environment.TickCount;
  • 谢谢各位。你是对的。 WP 缓存具有相同 url 的响应。

标签: c# windows-phone-7 asynchronous windows-phone-8 response


【解决方案1】:

这行得通:

url + "?param=" + RND.Next(10000)

但我更喜欢:

    HttpWebRequest request = HttpWebRequest.CreateHttp(url);
    if (request.Headers == null)
    {
        request.Headers = new WebHeaderCollection();
    }
    request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();

我找到了here

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 2013-01-24
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多