网Http.HttpClient只发布/请求同一个URL一次



我有一个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.
}

最新更新