我有一个Web API控制器,正在返回PDF。 Abobe Reader XI 11.0.12无法打开某些PDF
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.BinaryWrite(myByteArray);
HttpContext.Current.Response.End();
以上代码可以正常工作,并且可以在Adobe Reader和所有流行的浏览器中打开PDF。
但是它确实抛出“发送HTTP标头后服务器无法设置状态”。我一直忽略但想解决,因此我实现了以下代码。
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.BufferOutput = true;
HttpContext.Current.Response.BinaryWrite(myByteArray);
HttpContext.Current.Response.Flush();
此代码也可以正常工作,但是从此代码返回的PDF无法在Adobe Reader XI版本11.0.12中打开。 FF,Chrome,Edge可以很好地显示PDF。 IE 11无法。
打开此文档时出错。文件已损坏, 无法修复。
答案 0 :(得分:1)
基于@mason响应和链接Returning binary file from controller in ASP.NET Web API,我用以下代码替换了所有HttpContext.Current.Response
,以解决此问题:
public HttpResponseMessage LoadPdf(int id)
{
//get PDF in myByteArray
//return PDF bytes as HttpResponseMessage
HttpResponseMessage result = new HttpResponseMessage();
Stream stream = new MemoryStream(myByteArray);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "my-doc.pdf" };
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
result.StatusCode = HttpStatusCode.OK;
return result;
}