使用Awesomium在ASP.NET Web Form Postback后自动下载

4
我有一个使用ASP.NET Web Forms编写的网页。页面主体完全包含在form标签中,当提交时,它回复的是Excel文件而不是HTML页面。该页面还包括触发表单提交的JavaScript。正常的浏览器通过询问要保存Excel文件的位置来应对这种情况(Awesomium也会这样做)。
我无法修改页面,但我想自动下载Excel文件。我不能使用HTTP客户端,因为上述JavaScript计算许多复杂的事情,很难模拟;每次调用函数时,它都会返回表单的不同操作值。
我目前正在使用Awesomium.net,并已配置它开始下载。使用Fiddler,我看到文件的下载正确启动了。不幸的是,它似乎没有完成:(。或者,文件被检索到,但在Awesomium.net中没有任何更改:没有事件被触发以告知我下载已完成,我也不知道在哪里检索此文件。
我怀疑是因为返回的MIME类型不是text/html,而是application/vnd.ms-excel;我猜想Awesomium期望一个HTML文件,不知道如何处理Excel文件。它试图显示“另存为”模式对话框,但由于在无头服务中使用,没有弹出窗口可用。
因此,我没有收到任何事件(或者,我正在查找错误的地方),也没有可能以编程方式确定文件何时到达。
有没有办法解决这个问题?也许拦截所有的回复? 我需要以编程方式控制“另存为”对话框并选择保存文件的位置。

你尝试过订阅 WebCore.Download 吗? http://docs.awesomium.net/html/E_Awesomium_Core_WebCore_Download.htm - BjarkeCK
我以前没有使用过这个Awesomium产品,但是你为什么不用传统的Content-Disposition方式来做呢? - Michael Coxon
webcore.download 是我的第一次尝试:但问题是事件从未被触发:因为我声明了 web.core 中的任何事件都没有在下载此文件时被触发。 - Mosè Bottacini
关于 content-disposition:我没有尝试,因为我发现了这个链接 http://answers.awesomium.com/questions/720/modifying-response-headers-content-disposition-att.html ,然后我认为它不支持。也许更好的办法是深入调查,因为我的想法已经用尽了。 - Mosè Bottacini
1个回答

0

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

这次经历并不愉快,但最终它起作用了。 幸运的是,这项工作每天只需要运行一次,因此性能并不重要,我希望找到更好的解决方案,但我找不到比这更好的解决方案。 幸运的是,它有效,并且100%的时间都有效,所以我想我可以检查并推送今晚!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接