我正在尝试允许用户下载文件,并且已经尝试了很长一段时间但无济于事。我一直在使用的代码是:
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);