我有一个Windows phone 8.1应用程序,它可以读取二维码,然后通过HttpClient将其发布到我们的网站上。
网站读取URL,将值放入我们的数据库,然后返回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));
这里的问题是,如果我扫描一个值为"1234"的二维码,它就会发布它,返回TRUE,一切都很好。
如果我扫描SAME二维码"1234",那么它将自动返回TRUE,而不会实际执行Http调用。它永远不会到达网站,也不会将值保存到数据库中。
如果我扫描一个不同值的二维码,比如"12345",那么它也会正常工作。
如果我重新启动应用程序,那么我可以扫描同一个二维码,它也可以正常工作,也可以扫描一次。
如果我转到浏览器中的URL,只刷新垃圾邮件,它每次都会保存值,永远不会卡住。
tl;dr我只是假设这是因为HttpClient不POST,但请求?它缓存了价值?
我有一个Windows phone 8.1应用程序,它可以读取二维码,然后通过HttpClient将其发布到我们的网站上。
这是一个很好的描述,但这并不是你的代码实际在做什么:
string ResponseResult = await client.GetStringAsync(new Uri(URL));
该应用程序正在发送HTTP GET。任何GET响应都可以通过手机、代理等进行缓存。特别是,WP在缓存方面非常激进。
正确的解决方案是使用POST方法,例如HttpClient.PostAsync
您尝试过使用协议过滤器吗?或者设置缓存控制标头?这里有一个对我有用的例子:
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.
}