我有一个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,而是请求?并且它缓存了价值?
答案 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.
}