下载PDF文件并直接在MVC项目的浏览器中显示

时间:2015-09-17 16:14:46

标签: asp.net-mvc pdf asp.net-web-api

我从MVC项目调用Web API。 Web API在单击按钮后返回我想直接在浏览器中显示的PDF文件。我的问题是,当我点击链接时,它会下载pdf文件并在左下角显示图标,我必须单击它并在acrobat中打开PDf。如何通过单击链接直接在浏览器中打开pdf来实现它?

这是我打开pdf的MVC项目中的代码:

[HttpGet]
public FileResult openPdf(string name)
{
    byte[] pdfByte = DownloadFile();
    return File(pdfByte, "application/pdf", name);
}

internal byte[] DownloadFile()
{
    string serverUrl = "http://localhost/GetPdf?Number=3671"; 
    var client = new System.Net.WebClient();
    client.Headers.Add("Content-Type", "application/pdf");
    return client.DownloadData(serverUrl);
}

这是我的Web API中返回pdf的方法:

public HttpResponseMessage GetPdfNameByRemRef(string RemoteRefNumber)
{
    var stream = new MemoryStream();
    var response = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new ByteArrayContent(stream.GetBuffer())
    };

    byte[] fileBytes = System.IO.File.ReadAllBytes(@"C:\Pdf\CreditApplication_08192006_102714AM_et montis.pdf");

    response.Content = new ByteArrayContent(fileBytes);
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = customerInfo.Application_Filename;
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

    return response;
}

1 个答案:

答案 0 :(得分:0)

您可以尝试使用值Content-Disposition添加inline标头。

Response.AddHeader("Content-Disposition", "inline;filename=fileName.pdf");

但是,不同浏览器和您正在服务的文件类型的行为可能会有所不同。如果Content-Disposition设置为inline,浏览器将尝试在浏览器中打开文件,但如果文件类型未知,则可能会失败(例如.rar,.zip,.pdf / when pdf读者插件缺失/,如果浏览器老了等等。)。