Net.Http.HttpClient仅发布/请求相同的URL一次

时间:2015-03-20 14:08:27

标签: c# .net windows-phone-8.1 dotnet-httpclient

我有一个Windows Phone 8.1应用程序,可以读取QR码,然后通过HttpClient将它们发布到我们的网站。

网站读取网址,将值放入我们的数据库,然后返回true或false,我们在Windows手机应用程序中读取成功或失败的弹出窗口

基本上就像这样

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));

这里的问题是,如果我扫描的QR码具有值' 1234'然后它发布它,返回TRUE,一切都很好。

如果我扫描SAME QR码' 1234'然后它会在没有实际进行Http调用的情况下自动返回TRUE。它永远不会到达网站,也不会将价值保存到数据库中。

如果我使用不同的值扫描不同的QR码,例如' 12345'然后它也会正常工作。

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

如果我在浏览器中访问网址并只刷新垃圾邮件,则每次都会保存该值,但不会卡住。

TL;博士 我只是假设这是因为HttpClient没有POST,而是请求?并且它缓存了价值?

2 个答案:

答案 0 :(得分:3)

  

我有一个Windows Phone 8.1应用程序,可以读取QR码,然后通过HttpClient将它们发布到我们的网站。

这是一个很好的描述,但它不是你的代码实际上在做什么:

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

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

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

答案 1 :(得分:1)

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

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.
}