2015-05-26 31 views
4

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

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

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

我怀疑这是因为返回的MIME类型不text/html,但反而application/vnd.ms-excel。我的猜测是,Awesomium期望一个HTML文件,不知道如何处理Excel文件它试图展现一个“保存作为模态对话框,但是因为它在无头服务中使用,所以没有弹出窗口。

因此,我没有收到任何事件(或者我正在查找错误的地方),而且它不是“可以通过编程来确定文件何时到达。

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

+0

您是否尝试订阅'WebCore.Download'? http://docs.awesomium.net/html/E_Awesomium_Core_WebCore_Download.htm – BjarkeCK

+0

我之前没有使用这个Awesomium产品,但是有什么理由不以传统方式使用Content-Disposition? –

+0

webcore.download是我第一次尝试:但问题是,事件从来没有触发:因为我声明,当我下载这个文件时,web.core中没有事件被触发。 –

回答

0

我已经找到了更多的困难在解决此问题的工作 第一:因为它看起来,完全不知道给我一个理由的响应不被截获fiddlerSDK我不能修改内容处置标头,我用作代理。无论如何,幸好,该请求被拦截。 所以我的解决方法(非常脏)是在代理中拦截awesomium所做的请求,将所有标头和饼干分开复制并中止它。现在,Awesomium不再期待任何回复。 但我已经掌握了它在我手中用于请求的所有信息。 我已经制作了一个新的HttpRequestMessage,我用HttpClient发送它。 这样我也可以更好地处理答复,通过直接在内存中处理它,而不必将文件保存到磁盘,然后再次拾取它。

这段经历并不是那么令人愉快,但终于奏效了。幸运的是,这项工作每天只需要运行一次,所以表现并不重要,我希望找到一个更好的解决方案,但我找不到比这更好的解决方案。幸运的是,它的工作和工作时间100%,所以我想我可以办理登机手续并推送今晚!