【问题标题】:WP7 - Prevent RestSharp from cachingWP7 - 防止 RestSharp 缓存
【发布时间】:2012-04-19 16:27:06
【问题描述】:

我在我的 Windows Phone 7.1 项目中使用 RestSharp。

我的问题是 RestSharp 总是缓存响应数据。

例子:

在我第一次发送请求时,它会正确返回数据。经过一些删除操作后,我再次发送该请求,但响应似乎与第一次相同,没有任何变化。

如果我停止调试并按 F5 重新开始,它会按预期完美运行。

我也尝试了request.AddParameter("cache-control", "no-cache", ParameterType.HttpHeader);,但没有成功。

我该如何解决这个问题?

【问题讨论】:

  • RestSharp 没有任何内置缓存,因此这可能位于它所构建的 HttpWebRequest 层中。您是否可以控制 API 端点?你能发布更多你的代码吗?
  • 它是一个 hack,但尝试类似url = originalUrl + "&nocache=" + DateTime.Now.Ticks
  • 我使用@RicoSuter 提到的类似解决方案来解决相同的问题。

标签: windows-phone-7 restsharp


【解决方案1】:

我有同样的问题,所以只需添加指定不缓存响应数据的标头 客户端是我的带有基本 url 的 RestClient,而不是添加带有值 no-cache 的默认标头 Cache-Control。

client.AddDefaultHeader("Cache-Control", "no-cache")

【讨论】:

    【解决方案2】:

    我在 Rico Suter 评论中找到了解决方案,谢谢!我会将其标记为已接受的anwser

    它是一个 hack,但尝试类似 url = originalUrl + "&nocache=" + DateTime.Now.Ticks

    【讨论】:

    • 就像 Rico 说的那样,这是一个 hack……但是一个有效的!不过,我很好奇您是否尝试使用“Cache-Control”并添加“Pragma”标头!
    • 能否强调这与RestSharp无关?
    • 是的,问题出在HttpWebRequest 实现中,它使用了无法禁用的缓存...
    • 我很确定它与客户端无关,而与服务器有关。
    • 当然如果你可以修改服务器你可以禁用缓存(见pedro的回答)
    【解决方案3】:

    “Cache-Control”标头应该可以解决问题!

    我认为 HTTP 标头不区分大小写,但服务器可能不同意我的看法!您应该尝试使用Cache-Control 而不是cache-control...

    另外,我还会在请求中添加带有no-cache 值的Pragma 标头(一些旧服务器不使用“Cache-Control”标头,但它们肯定会识别这个标头)!

    我会尝试使用 Fiddler 调试通信并检查标头是否真的按预期发送到服务器!

    【讨论】:

      【解决方案4】:

      另一种解决方案是设置“If-Modified-Since”标头,值为DateTime.Now

      client.AddDefaultParameter("If-Modified-Since", DateTime.Now, ParameterType.HttpHeader);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 2020-05-27
        • 2015-04-10
        相关资源
        最近更新 更多