2

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

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

(ETC)

更改我的调试设置我发现我得到的异常是

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

我通过谷歌搜索并尝试了许多解决方案,但到目前为止没有任何效果。据我所知,这是唯一一次使用 Response - 除非发生了一些后台进程(如果是这样,我该如何更改?)。请注意,我使用的是 Asp.NET MVC。

有任何想法吗?

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

代码在通过 Ajax 调用的 Webmethod 中,原因是我需要通过客户端调用服务器端(不好的做法,但在提供的时间内需要它)并且我还需要传递一个参数.

这是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);
4

1 回答 1

0

尝试使用 HttpContext.Response.AppendHeader("Content-disposition", ....) 并摆脱 Response.ClearHeaders(); 和 Response.Clear(); 线。

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

于 2012-12-05T12:18:54.933 回答