无法在ASP.NET MVC中将响应添加到响应中

时间:2012-08-12 21:13:16

标签: asp.net-mvc download

我正在尝试允许用户下载文件,并且已经尝试了很长时间但无法使其工作。 我一直在使用的代码是:

Response.ClearHeaders();
Response.Clear();
Response.BufferOutput = true;
Response.AddHeader("Content-disposition", 
                    "attachment; filename= "+ Path.GetFileName(path) + fileType);                     
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(buffer);
Response.Flush();
Response.Close();
Response.End();

不幸的是,当我试图让它运行时没有任何反应,除了很多例外:

A first chance exception of type 'System.Web.HttpException' occurred in System.Web.dll
A first chance exception of type 'System.Web.HttpException' occurred in System.Web.Mvc.dll
A first chance exception of type 'System.Web.HttpException' occurred in System.Web.Mvc.dll
A first chance exception of type 'System.NullReferenceException' occurred in WebDev.WebHost40.dll

(等)

更改我的调试设置我发现我得到的例外是

  

“在发送HTTP标头后,服务器无法设置内容类型。”

我已经搜索了Google并尝试了许多解决方案,但到目前为止还没有任何工作。据我所知,这是唯一一次使用Response - 除非有一些后台进程发生(如果是这样,我该怎么改变它?)。请注意我使用的是Asp.NET MVC。

有什么想法吗?

编辑: 以下是一些可能有助于解决问题的上下文:

代码在通过Ajax调用的Web方法内部,原因是我需要通过客户端调用服务器端(不好的做法,但是在提供的时间内需要)并且我还需要通过通过参数。

这是ajax调用:

$("#Button").each(function() { 
                this.submitting = false; //To prevent double-clicking problems
            }).on("click", function (e) {
                if (e.preventDefault) e.preventDefault();
                $.ajaxSetup({ cache: false });
                e.preventDefault();
                 if (!this.submitting) 
                { 
                    this.submitting = true; 
                    var self = this; 
                    $.ajax({
                        url: 'Controller/retrieveFile',
                        type: 'POST',
                        data: { SystemNumber: $("#Button").val() },
                        dataType: 'json',
                        success: function (data) {
                            self.submitting = false; 
                        },
                        error:  function() { 
                            self.submitting = false; 
                        } 
                    });
                }
            });

这可能是返回值的问题吗?目前我要回来了

Json(true, JsonRequestBehavior.AllowGet);

1 个答案:

答案 0 :(得分:0)

尝试使用HttpContext.Response.AppendHeader(“Content-disposition”,....)并删除Response.ClearHeaders();和Response.Clear();线。

另外,您应该考虑使用FileContentResult作为方法的返回类型。