为什么我的PDF文档在ASP.NET MVC2中不呈现/下载?

时间:2010-10-01 09:01:04

标签: asp.net-mvc iis

我正在开发一个ASP.NET MVC2应用程序,我在生成服务器上呈现.pdf文件时遇到问题。

在我的Visual Studio 2010集成开发服务器上,一切正常,但在将应用程序发布到生产服务器后,它会中断。它不会抛出任何异常或错误,它只是不显示文件。

这是我显示PDF文档的功能:

public static void PrintExt(byte[] FileToShow, String TempFileName, 
                                                       String Extension)
{
    String ReportPath = Path.GetTempFileName() + '.' + Extension;

    BinaryWriter bwriter = 
        new BinaryWriter(System.IO.File.Open(ReportPath, FileMode.Create));
    bwriter.Write(FileToShow);
    bwriter.Close();

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = ReportPath;
    p.StartInfo.UseShellExecute = true;
    p.Start();
}

我的生产服务器正在运行Windows Server 2008和IIS 7.

3 个答案:

答案 0 :(得分:4)

您不能指望打开与服务器上的PDF文件浏览相关联的默认程序。尝试将文件返回到响应流中,这将在客户端计算机上有效地打开它:

public ActionResult ShowPdf()
{
    byte[] fileToShow = FetchPdfFile();
    return File(fileToShow, "application/pdf", "report.pdf");
}

现在导航到/somecontroller/showPdf。如果您希望在浏览器中打开PDF而不是显示下载对话框,您可以尝试在返回之前将以下内容添加到控制器操作中:

Response.AddHeader("Content-Disposition", "attachment; filename=report.pdf");

答案 1 :(得分:2)

我建议您使用ASP.NET MVC FileResult类来显示PDF。

请参阅http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx

您的代码在网络服务器上打开PDF。

答案 2 :(得分:0)

我是这样做的。

public ActionResult PrintPDF(byte[] FileToShow, String TempFileName, String Extension)
    {
        String ReportPath = Path.GetTempFileName() + '.' + Extension;

        BinaryWriter bwriter = new BinaryWriter(System.IO.File.Open(ReportPath, FileMode.Create));
        bwriter.Write(FileToShow);
        bwriter.Close();

        return base.File(FileToShow, "application/pdf");
    }

谢谢大家的努力。我使用的解决方案与Darin的解决方案最相似(几乎相同,但他更漂亮:D),所以我会接受他的解决方案。

为所有人投票(答案和评论)

由于