C# 未能在web api中加载PDF文档

C# 未能在web api中加载PDF文档,c#,jquery,asp.net,asp.net-web-api,dotnetnuke,C#,Jquery,Asp.net,Asp.net Web Api,Dotnetnuke,我在下载和打开pdf文件时出错 无法加载PDF文档 。但当我尝试下载txt文件时,下载完全成功。我需要将这个ajax请求作为POST方法,所以在互联网上搜索后,我找到了这段代码 $.ajax({ type: "POST", url: url, cache: false, contentType: false, processData: false, success: function (data) { var blob = new Blob([data]); var link

我在下载和打开pdf文件时出错

无法加载PDF文档

。但当我尝试下载txt文件时,下载完全成功。我需要将这个ajax请求作为POST方法,所以在互联网上搜索后,我找到了这段代码

$.ajax({
type: "POST",
url: url,
cache: false,
contentType: false,
processData: false,
success: function (data) {

    var blob = new Blob([data]);
    var link = document.createElement('a');
    link.href = window.URL.createObjectURL(blob);
    link.download = textName;
    link.click();
}, error: function (data) { alert("error"); }});
我使用web api下载文件

public HttpResponseMessage Download(string fileName)
{   
    string filePath = Path.Combine(PATH, fileName.Replace('/', '\\'));
    byte[] pdf = System.IO.File.ReadAllBytes(filePath);
    HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK);
    result.Content = new ByteArrayContent(pdf);
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = "MyPdf.pdf";
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    return result;
}
请帮帮我

jQuery在使用AJAX请求加载二进制数据时遇到一些问题,因为 尚未实现一些HTML5 XHR v2功能

它提供了两个选项供您尝试。我不会在这里重复它们,因为它们属于那个答案。检查链接

在服务器端,我用这种方法成功下载了PDF文件

[HttpPost]
public HttpResponseMessage Download(string fileName)
{   
    string filePath = Path.Combine(PATH, fileName.Replace('/', '\\'));
    byte[] pdf = System.IO.File.ReadAllBytes(filePath);
    //content length for header
    var contentLength = pdf.Length;
    var statuscode = HttpStatusCode.OK;
    var result = Request.CreateResponse(statuscode);
    result.Content = new StreamContent(new MemoryStream(buffer));
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    result.Content.Headers.ContentLength = contentLength;
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = "MyPdf.pdf";

    return result;
}
和你原来的没什么不同

如果从磁盘/数据库读取或动态生成文件,还应检查以确保服务器上的原始文件未损坏。

jQuery在使用AJAX请求加载二进制数据时遇到一些问题,因为 尚未实现一些HTML5 XHR v2功能

它提供了两个选项供您尝试。我不会在这里重复它们,因为它们属于那个答案。检查链接

在服务器端,我用这种方法成功下载了PDF文件

[HttpPost]
public HttpResponseMessage Download(string fileName)
{   
    string filePath = Path.Combine(PATH, fileName.Replace('/', '\\'));
    byte[] pdf = System.IO.File.ReadAllBytes(filePath);
    //content length for header
    var contentLength = pdf.Length;
    var statuscode = HttpStatusCode.OK;
    var result = Request.CreateResponse(statuscode);
    result.Content = new StreamContent(new MemoryStream(buffer));
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    result.Content.Headers.ContentLength = contentLength;
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = "MyPdf.pdf";

    return result;
}
和你原来的没什么不同


如果从磁盘/数据库读取或动态生成文件,还应检查以确保服务器上的原始文件未损坏。

问题可能是您的内容处置头。你需要内联,但你有附件

result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");
您现在所拥有的内容告诉浏览器直接发送文件,并且永远不要尝试在浏览器中显示文件。当你这样做时,Chrome的内部PDF查看器当前会阻塞


更多信息:

问题可能是您的内容处置标题。你需要内联,但你有附件

result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");
您现在所拥有的内容告诉浏览器直接发送文件,并且永远不要尝试在浏览器中显示文件。当你这样做时,Chrome的内部PDF查看器当前会阻塞


更多信息:

如果在
Blob
构造函数中指定mime类型,该怎么办
var blob=newblob([data],{type:'application/pdf'})是的,我也试过了:(你在使用什么浏览器?在哪一行抛出错误?我在使用Google chrome。我在下载.Pdf文件时没有收到任何错误。下载和打开文件时,如果你在
Blob
构造函数中指定mime类型,它会显示错误为无法加载PDFWhat?
var Blob=new Blob([data],{type:'application/pdf'});
是的,我也试过了:(你在使用什么浏览器?在哪一行抛出了错误?我在使用谷歌浏览器。我在下载.pdf文件时没有收到任何错误。下载文件时,打开文件时显示错误为无法加载pdf