javascript - 使用 Awesomium 在 ASP.NET Web 表单回发后自动下载

标签 javascript c# asp.net download awesomium

我有一个使用 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 文件。它试图显示一个“另存为”模式对话框,但由于它在 headless 服务中使用,因此没有可用的弹出窗口。

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

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

最佳答案

我在解决这个问题时发现了更多的困难 首先:我无法修改内容处置 header ,因为看起来出于我完全不知道的原因,响应没有被我用作代理的 fiddlerSDK 拦截。 不管怎样,幸运的是,请求被拦截了。 所以我的解决方法(非常脏)是在代理中拦截 awesomium 发出的请求,将所有 header 和 cookie 分开复制并中止它。 Awesomium 现在不再期待任何回复。 但我已经掌握了它用于请求的所有信息。 然后我制作了一个新的 HttpRequestMessage 并使用 HttpClient 发送它。 这样我也可以更好地处理回复,直接在内存中处理它,而不是将文件保存到磁盘然后再次获取它。

这次体验不是很愉快,但最终还是奏效了。 幸运的是,这项工作每天只需要运行一次,所以性能根本不重要,我希望找到一个更好的解决方案,但我找不到比这更好的了。幸运的是,它在 100% 的时间都有效,所以我想我可以登记入住并插入今晚的工作!

关于javascript - 使用 Awesomium 在 ASP.NET Web 表单回发后自动下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469902/

相关文章:

javascript - 奇怪的随机值作为默认间隔处理程序参数

javascript - 元素的 href 属性已被 javascript 删除,但它仍然存在于页面源代码中

asp.net:response.redirect 不起作用

c# - 从字符串中解析日期时间

c# - 使用 C# 时波形头已损坏

c# - 如何从 mysql 数据库中删除多余的记录并且只有 1 行,

javascript - 为什么 JScript 运行时错误 : Object expected

javascript - 如何使用 javascript 检查 URL 是否可用

javascript - 如何在指定符号前添加符号?

c# - C++ 模板和 Java/C# 泛型之间的区别是什么?限制是什么?