我创建了一个Web Api,返回一个HttpResponseMessage,其中内容被设置为PDF文件.如果我直接调用Web Api,它的效果很好,PDF在浏览器中呈现.
response.Content = new StreamContent(new FileStream(pdfLocation,FileMode.Open,FileAccess.Read)); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); response.Headers.ConnectionClose = true; return response;
我有一个想要联系Web Api的MVC客户端,请求Pdf文件,然后以与上述相同的方式将其呈现给用户.
不幸的是,我不知道问题在哪里,但即使我设置了内容类型:
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
当我点击调用web api的链接时,我得到一个HttpResponseMessage的文本渲染.
StatusCode: 200,ReasonPhrase: 'OK',Version: 1.1,Content: System.Net.Http.StreamContent,Headers: { Connection: close Content-Disposition: attachment Content-Type: application/pdf }
我认为客户端应用程序缺少一些设置,将允许它呈现像我的Web Api的PDF …
任何帮助将不胜感激.
谢谢
解决方法
经过几个小时的Google搜索以及试用和错误,我已经解决了这个问题.
而不是将响应的内容设置为StreamContent,我已将其更改为Web Api端的ByteArrayContent.
byte[] fileBytes = System.IO.File.ReadAllBytes(pdfLocation); response.Content = new ByteArrayContent(fileBytes); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); response.Content.Headers.ContentDisposition.FileName = fileName; response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
通过这样做,我的MVC 4应用程序可以使用WebClient和DownloadData方法下载PDF.
internal byte[] DownloadFile(string requestUrl) { string serverUrl = _baseAddress + requestUrl; var client = new System.Net.WebClient(); client.Headers.Add("Content-Type","application/pdf"); return client.DownloadData(serverUrl); }
返回的Byte []数组可以很容易地转换为MemoryStream,然后返回文件输出…
Response.AddHeader("Content-Disposition","inline; filename="+fileName); MemoryStream outputStream = new MemoryStream(); outputStream.Write(file,file.Length); outputStream.Position = 0; return File(outputStream,"application/pdf");
我希望这可以对别人有用,因为我浪费了很多时间让它工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。