我正在尝试允许用户下载文件,并且已经尝试了很长时间但无法使其工作。 我一直在使用的代码是:
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);
答案 0 :(得分:0)
尝试使用HttpContext.Response.AppendHeader(“Content-disposition”,....)并删除Response.ClearHeaders();和Response.Clear();线。
另外,您应该考虑使用FileContentResult作为方法的返回类型。