Net.Http.HttpClient 仅 posts/requests 相同 URL 一次

Net.Http.HttpClient only posts/requests the same URL once

我有一个 Windows phone 8.1 应用程序可以读取二维码,然后 post 通过 HttpClient 将它们发送到我们的网站。

网站读取 URL,将值放入我们的数据库,然后 returns true 或 false 我们读取以在 Windows 中弹出成功或失败的弹出窗口=36=]应用程序

基本上是这样

string URL = string.Format("http://website.com/controller/action/{0}/{1}", value, key);
HttpClient client = new HttpClient();
string ResponseResult = await client.GetStringAsync(new Uri(URL));

这里的问题是,如果我扫描一个值为“1234”的 QR 码,那么它将 post 它,return 真,一切正常。

如果我扫描相同的 QR 码“1234”,那么它将自动 return TRUE,而无需实际进行 Http 调用。它永远不会到达网站,也不会将值保存到数据库中。

如果我用不同的值扫描不同的 QR 码,例如“12345”,那么它也可以正常工作,一次。

如果我重新启动应用程序,那么我可以扫描相同的 QR 码,它会正常工作,而且一次。

如果我在浏览器中转到 URL 并只是垃圾邮件刷新,它会保存每次的值,永远不会卡住。

tl;博士 我只是假设这是因为 HttpClient 没有 POST,但是 Requests?它缓存值?

您尝试过使用协议过滤器吗?或者设置缓存控制头?这是一个对我有用的例子:

var filter = new HttpBaseProtocolFilter();

filter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.MostRecent;
filter.CacheControl.WriteBehavior = Windows.Web.Http.Filters.HttpCacheWriteBehavior.NoCache;

using (var httpClient = new HttpClient(filter))
{
    httpClient.DefaultRequestHeaders.Add("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");

    Uri uri;
    Uri.TryCreate(someUrl + "?ts=" + DateTime.Now.Ticks, UriKind.Absolute, out uri);

    var json = await httpClient.GetStringAsync(uri);

    // Now do something with the json.
}

I have a Windows phone 8.1 app that reads QR codes and then posts them to our website through the HttpClient.

这是一个很好的描述,但这不是您的代码实际执行的操作:

string ResponseResult = await client.GetStringAsync(new Uri(URL));

应用正在发送 HTTP GET。任何 GET 响应都可以通过手机、代理等进行缓存。特别是,WP 对缓存非常积极。

正确的解决方法是使用POST的方法,比如HttpClient.PostAsync