.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文件,而不是想要将其下载到用户硬盘的浏览器?感谢
答案 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");
}