在新标签页中打开生成的pdf文件,而不是下载..Web API

时间:2017-12-09 15:45:34

标签: c# pdf asp.net-web-api

.Net 4.6.1 C#

我在运行时生成pdf文件,可以成功下载。我想在新标签页中打开新创建的pdf文件,而不是下载它。这是我的代码(Web API 2.1方法):

  public HttpResponseMessage ToPDF(string cn)
    {

        var stream = new MemoryStream();
            stream = GeneratePDF();


        var result = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ByteArrayContent(stream.ToArray())
        };
        result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
        {
            FileName = "file.pdf"
        };
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");


        return result;


    }

我认为这会奏效,但事实并非如此。我有目标=" _blank"在我的锚标签上也是如此。如何在新选项卡中打开我新生成的pdf文件,而不是想要将其下载到用户硬盘的浏览器?感谢

3 个答案:

答案 0 :(得分:5)

除了David Mkheyan关于设置正确MIME类型的建议之外,您还需要将内容处置方式从attachment更改为inline

result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue(System.Net.Mime.DispositionTypeNames.Inline)
    {
        FileName = "file.pdf"
    };

根据https://www.iana.org/assignments/cont-disp/cont-disp.xhtml attachment表示“用户控制的显示”,inline表示“自动显示”。

答案 1 :(得分:1)

只需将媒体类型从application / octet-stream更改为application / pdf。它应该可以工作。我猜你也可以将返回类型改为FileResult而不是HttpResponseMessage。 result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

答案 2 :(得分:0)

只需返回PhysicalFileResult并使用HttpGet方法,URL将打开pdf文件

public ActionResult GetPublicLink()
 {
         path = @"D:\Read\x.pdf";
        return new PhysicalFileResult(path, "application/pdf");
}