【问题标题】:Automate download after ASP.NET Web Form postback using Awesomium使用 Awesomium 在 ASP.NET Web 表单回发后自动下载
【发布时间】:2015-05-26 22:18:01
【问题描述】:

我有一个使用 ASP.NET Web 窗体编写的网页。整个页面正文包含在form 标记中,在提交时,该标记使用 Excel 文件而不是 HTML 页面进行回复。该页面还包含触发表单提交的 JavaScript。普通浏览器会通过询问保存 Excel 文件的位置来对这种情况做出反应(Awesomium 也这样做)。

我无法修改页面,但我想自动下载 Excel 文件。我不能使用 HTTP 客户端,因为上面提到的 JavaScript 计算了许多难以模拟的东西;每次调用该函数时,它都会为表单返回不同的操作值。

我目前正在使用 Awesomium.net,并已将其配置为开始下载。使用 Fiddler 我看到文件的下载正确开始。不幸的是,它似乎没有完成:(。或者,文件被检索但 Awesomium.net 中没有任何变化:没有触发任何事件来通知我下载已完成,我不知道在哪里检索这个文件。

我怀疑这是因为返回的 mimetype 不是text/html,而是application/vnd.ms-excel;我的猜测是 Awesomium 需要一个 HTML 文件并且不知道如何处理 Excel 文件。它试图显示一个“另存为”模式对话框,但由于它在无头服务中使用,因此没有可用的弹出窗口。

因此,我没有收到任何事件(或者,我看错了地方),并且无法以编程方式确定文件何时到达。

有没有办法解决这个问题?也许拦截所有的回复? 我需要以编程方式控制“另存为”对话框并选择保存文件的位置。

【问题讨论】:

  • 您尝试订阅WebCore.Download 吗? docs.awesomium.net/html/E_Awesomium_Core_WebCore_Download.htm
  • 我以前没有使用过这个 Awesomium 产品,但是你有什么理由不使用 Content-Disposition 以传统方式这样做吗?
  • webcore.download 是我的第一次尝试:但问题是该事件从未被触发:正如我所说,当我下载此文件时,web.core 中的任何事件都不会被触发。
  • 关于内容处置:我没有尝试,因为我发现了这个answers.awesomium.com/questions/720/…,然后认为它不受支持。也许最好深入调查,因为我的想法已经不多了

标签: javascript c# asp.net download awesomium


【解决方案1】:

我发现解决这个问题还有几个困难 首先:我无法修改 content-disposition 标头,因为似乎出于我完全不知道的原因,响应没有被我用作代理的 fiddlerSDK 截获。 无论如何,幸运的是,请求被拦截了。 所以我的解决方法(非常肮脏)是在代理中拦截 awesomium 发出的请求,复制所有标头和 cookie 并中止它。 Awesomium 现在不再期待任何回复。 但我已经掌握了它用于请求的所有信息。 然后我制作了一个新的 HttpRequestMessage 并使用 HttpClient 发送它。 这样我也可以更好地处理回复,直接在内存中处理它,而无需将文件保存到磁盘然后重新拾取。

这次经历并不那么愉快,但最终奏效了。 幸运的是,这项工作每天只能运行一次,因此性能根本不重要,我希望找到更好的解决方案,但找不到比这更好的解决方案。幸运的是,它在 100% 的时间里都能正常工作,所以我想我可以登记入住并争取今晚!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2016-11-01
    • 2018-08-08
    相关资源
    最近更新 更多