我在Asp.NET中编写了以下代码,我正在尝试将其转换为MVC,但不确定如何在Action中执行此操作
HttpContext context;
context.Response.ContentType = "application/pdf";
context.Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", filename));
context.Response.WriteFile(filename);
context.Response.Flush();
context.Response.SuppressContent = true;
答案 0 :(得分:3)
public ActionResult Download()
{
var cd = new ContentDisposition
{
Inline = false,
FileName = filename
};
Response.SuppressContent = true;
Response.AppendHeader("Content-Disposition", cd.ToString());
return this.File(filename, MediaTypeNames.Application.Pdf);
}
更新:
因此,您有一个生成PDF文件的服务器端脚本(PDF.axd
)。您没有将pdf文件存储在文件系统中。在这种情况下,您需要先获取pdf,然后将其流式传输到客户端:
public ActionResult Download()
{
byte[] pdfBuffer = null;
using (var client = new WebClient())
{
var url = string.Format("PDF.axd?file={0}.pdf", voucherDetail.Guid);
pdfBuffer = client.DownloadData(url);
}
var cd = new ContentDisposition
{
Inline = false,
FileName = "file.pdf"
};
Response.SuppressContent = true;
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(pdfBuffer, MediaTypeNames.Application.Pdf);
}
此控制器操作的用处令人怀疑,因为您已经有一个可以完成工作的脚本。
答案 1 :(得分:0)
你的意思是'内容'而不是'上下文'类型,是吗?
也许这篇SO帖子会有所帮助: ASP.NET MVC and text/xml content type