c# - 将文件写入 HttpResponse,浏览器不提示保存

标签 c# javascript asp.net ajax ashx

我有一个带有 IHttpHandler 的 ashx 文件。当我向这个 IHttpHandler 发布一些数据时,我做了一些工作,创建了一个文件,然后希望将该文件返回给用户,以便他们可以通过浏览器保存该文件。

创建文件后,这就是我尝试将文件写回响应的方式:

HttpResponse response = context.Response;
response.ClearContent();
response.Clear();
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment; filename=MYFILE.EXT");
response.WriteFile("C:\tempstuff\MYFILE.EXT");

在稍后的 finally block 中,我将调用:

response.End()

当我调用这个 Handler 时,没有任何反应。返回响应 200,没有抛出任何错误 - 但浏览器不会提示用户保存此文件。

这是 Fiddler 捕获的响应的样子:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 23 Aug 2012 12:12:19 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename=MYFILE.EXT
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 781053
Connection: Close

[raw content of the file here]

我觉得这个回复是正确的。它包含文件的内容 - 但是在任何主要浏览器下,没有文件对话框提示我保存文件。

我在这里做错了什么?

更新:如果它有帮助,这里是我在我的网络应用程序中使用 JavaScript 来调用这个 HttpHandler 的地方。

$.ajax({
    type: 'POST',
       url: ashxUrl,
       data: postData,
       success: function (result) {
           // Doin' stuff on success
       },
       error: function (error) {
           // Doin' stuff on error.
        }
});

最佳答案

您说过您希望网络调用的结果可用于您的 javascript。如果这导致浏览器提示您保存它,那将是非常烦人的,因为那样所有 AJAX 都是不可能的。

您希望浏览器本身进行调用。对于 GET,只需设置 self.location.href 即可。对于 POST,最简单的方法通常是用数据填写一个隐藏的表单,然后 submit() 它。

关于c# - 将文件写入 HttpResponse,浏览器不提示保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092243/

相关文章:

c# - 在自动化测试构建期间如何使用 BACPAC 恢复 Azure 数据库?

javascript - webmethod返回整个html插入字符串值

c# - 如何用充满 JPEG 图像的文件夹创建字节数组并将它们显示在 DataGridView 的列中?

c# - 如何关闭在 WPF 中用作子菜单的弹出窗口

c# - 如何删除 Visual Studio 中调试器建议的约束

javascript - 在 Chrome 中重新计算样式事件大约需要 2 秒

javascript - 如何从 navaigater 栏的 Highstock 图表中删除时间?

javascript - 如何获取 <script src ="url.json"> 中的 json 内容

c# - 如何合并这两个 linq 查询的输出?

带有 DBNULL 的 ASP.Net 检查值