Pdf在HttpResponseMessage中被破坏

时间:2017-09-28 11:58:05

标签: c# asp.net-web-api

我有一个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中的格式化程序正在解析内容错误。

我在这里结识,所以任何意见都会非常感激。

1 个答案:

答案 0 :(得分:0)

我通过删除jwt"授权"解决了这个问题。请求标头中的令牌。我更改了它以通过创建备用提供程序来获取来自URL的令牌,遵循以下文章: https://leastprivilege.com/2013/10/31/retrieving-bearer-tokens-from-alternative-locations-in-katanaowin/