我有一个ASP.NET MVC 5项目,我正在尝试下载pdf。我认为这将非常简单,但显然不是这样,因为pdf在发送到浏览器时会以某种方式错误地格式化。 Chrome会读取pdf,但所有特殊字符和图片看起来都已损坏,Edge只是拒绝打开它。
pdf文件是用丹麦文写的,所以它包含'æ','ø'和'å'等字母,还包含各种图像。
我简化了我的代码当前代码,但问题仍然是相同的:
[HttpGet]
public HttpResponseMessage DownloadDocument()
{
try
{
var localFilePath = "C:\\*somepath*\\Testpdf.pdf";
var fileStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read);
fileStream.Seek(0, SeekOrigin.Begin);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(fileStream);
response.Content.Headers.Add("Content-Disposition", "inline;filename=\"Testpdf.pdf\"");
response.Content.Headers.Add("Content-Length", fileStream.Length.ToString());
response.Content.Headers.Add("Content-Name", "Testpdf.PDF");
response.Content.Headers.Add("Content-Type", "application/pdf;charset=UTF-8");
return response;
}
catch (Exception e)
{
throw e;
}
}
它从磁盘读取pdf并将文件流分配给HttpResponseMessage的内容。在示例中,我使用的是StreamContent,但如果切换到ByteArrayContent,结果仍然相同。
我也尝试将文件写回磁盘,没有任何问题。我只是在dotnetcore 2.0网络项目中做了同样的行为,没有任何问题,这让我相信Web API中的格式化程序正在解析内容错误。
我在这里结识,所以任何意见都会非常感激。
答案 0 :(得分:0)
我通过删除jwt"授权"解决了这个问题。请求标头中的令牌。我更改了它以通过创建备用提供程序来获取来自URL的令牌,遵循以下文章: https://leastprivilege.com/2013/10/31/retrieving-bearer-tokens-from-alternative-locations-in-katanaowin/