如何让MVC返回Context类型

时间:2009-12-13 09:52:03

标签: asp.net-mvc pdf-generation

我在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;

2 个答案:

答案 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