Windows Phone 8.1 中快速发送 HTTP 命令

Send HTTP command rapidly in Windows Phone 8.1

我有一个Vu+卫星盒子,我正在为盒子开发一个WP8.1遥控器。

Vu+ 盒子有一个网络服务并接受如下命令:http://192.168.1.11/web/remotecontrol?command={0}

我的代码是这样的:

  private void Button_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            string cmd = ((Button)sender).Tag.ToString();
            SendBtnCommand(cmd);
        }
        catch { }

    }

    private async void SendBtnCommand(string cmd)
    {
        using (HttpClient h = new HttpClient())
        {
            string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
        }

    }

但是好像连接没有关闭。我只能发送一次相同的命令,然后必须等待一分钟才能再次发送相同的命令。 我可以连续发送多个不同的命令。

任何关于如何优化这个的帮助?

想出了丑陋的技巧。不过,我会尝试看看如何实现 headers。

string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}&{1}", cmd, DateTime.Now.Millisecond));

这样就不会缓存相同的命令。

您可以关闭缓存,而不是在 url 中传递额外的参数。

using (var h = new HttpClient())
        {
            h.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue {NoCache = true};
            string x = await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
        }

这个缓存问题还有另一种解决方案。您可以像这样覆盖默认的 httpClientHandler

public class BypassCacheHttpRequestHandler : HttpClientHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (request.Headers.IfModifiedSince == null)
            request.Headers.IfModifiedSince = new DateTimeOffset(DateTime.Now);
        return base.SendAsync(request, cancellationToken);
    }
}

在启动您的 httpClient 时,您可以传递上述处理程序以避免缓存问题

using (var h = new HttpClient((new BypassCacheHttpRequestHandler(), true))
{
 string x =await h.GetStringAsync(string.Format("http://192.168.1.11/web/remotecontrol?command={0}", cmd));
}

来源: