【问题标题】:How to set Header when restoring Background Downloads恢复后台下载时如何设置标题
【发布时间】:2013-10-29 13:39:23
【问题描述】:

我正在尝试使用 cookie 身份验证进行一些下载:

var downloader = new BackgroundDownloader();
downloader.SetRequestHeader("Cookie", "JSESSIONID=" + App.LoginGateway.JSESSIONID);
downloader.SetRequestHeader("Cookie", "JSESSIONID=" + App.LoginGateway.JSESSIONID);

直到这里一切正常,当我尝试恢复我的下载并且我的 JSESSIONID 已过期时,问题就开始了

IReadOnlyList<DownloadOperation> downloads = null;
downloads = await BackgroundDownloader.GetCurrentDownloadsAsync();

我试图找到在哪里可以再次设置请求标头,但我没有能力。如果我创建一个新的 BackgroundDownloader 我可以在哪里为我的下载操作设置它?非常感谢一些帮助

【问题讨论】:

    标签: c# windows-8 windows-runtime background-transfer


    【解决方案1】:

    从 Windows 8.1 开始,BackgroundTransfer 不支持在创建操作后更新与 DownloadOperation/UploadOperation 关联的标头,即使该操作已暂停/恢复。您需要中止旧下载并使用更新的 JSESSIONID 标头创建新下载。

    当您的应用程序启动时,它应该使用 BackgroundDownloader.GetCurrentDownloadsAsync() 来查询在您的应用程序暂停/终止时可能在后台发生的所有下载操作。然后,您的应用程序应在每个 DownloadOperation 上调用 AttachAsync 以附加进度和完成处理程序。在这种情况下,您应该在完成处理程序中实现逻辑,该逻辑可以识别此特定错误情况并为相同的内容创建新的下载(使用新的 JSESSIONID)。

    顺便说一句,如果您要寻找其他需要对此类失败下载进行后处理的人,您可能会遇到一些在后台任务中执行这些检查的人,他们注册为在定期计时器上运行。虽然这听起来不错(因为这意味着您可以重试下载而无需等待用户下次将您的应用程序带到前台),但请记住,如果您尝试,BackgroundTransfer 可能会挂起call AttachAsync in a Background Task for an operation which was started in your foreground application code

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2013-10-11
      • 2016-06-29
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      相关资源
      最近更新 更多