如何在恢复后台下载时设置标题

本文关键字:设置 标题 下载 后台 恢复 | 更新日期: 2023-09-27 18:31:32

我正在尝试使用 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();

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

如何在恢复后台下载时设置标题

从 Windows 8.1 开始,后台传输不支持在创建操作后更新与下载操作/上载操作关联的标头,即使操作已暂停/恢复也是如此。您需要中止旧下载并使用更新的 JSESSIONID 标头创建新下载。

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

顺便说一句,如果您去搜索需要对此类失败的下载进行后处理的其他人,您可能会遇到一些在后台任务中执行这些检查的人,他们注册以在定期计时器上运行。虽然这听起来是个好主意(因为这意味着您可以重试下载,而无需等待用户下次将应用程序置于前台),但请记住,如果您尝试在后台任务中为在前台应用程序代码中启动的操作调用 AttachAsync,则 BackgroundTransfer 可能会挂起