" Microsoft Edge PDF内联问题"同样的问题

时间:2015-08-06 08:29:32

标签: pdf inline mime-types content-disposition microsoft-edge

即使我没有使用Win 10的预发布版本,但我仍然遇到了之前报告并在Microsoft Edge PDF inline issue下回答的相同问题,但最新通过Windows Update下载了

将我的Win 8.1计算机升级到Win 10并测试了我的ASP.NET应用程序后,我遇到了显示内联pdf文件的问题。

这是我的ASP.NET应用程序中的C#代码:

Response.Clear();
Response.ClearHeaders(); 
Response.ClearContent();
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition","inline;filename=some.pdf");
Response.BinaryWrite(pdfArray); 
Response.End();

以上适用于所有浏览器,但在Edge上,它会给我以下错误:

无法打开PDF 有些东西使这个PDF无法打开。

我做错了什么?

4 个答案:

答案 0 :(得分:12)

Microsoft Connect上的解决方法复制。

警告:如果/当Microsoft解决了这个问题,这是一个彻底的黑客攻击并且存在破坏的风险。

每当您查看PDF时,您都会看到Edge发出两个请求。对我来说,看起来浏览器正在发送初始请求,然后PDF查看器在打开时发出自己的请求。如果您查看第二个请求中的标头,您会看到一个奇怪的DLNA标头,这应该只是用于媒体流,但这导致我的解决方法......

  1. 在处理程序或页面中收到请求时,请检查用户代理字符串是否包含“Edge / 12”。如果没有,请正常发送PDF。如果是,请继续执行步骤#2。

  2. 检查HTTP标头“GetContentFeatures.DLNA.ORG”是否存在。如果没有,则表示请求来自浏览器。只需发回“application / pdf”的Content-Type标题和空体。如果标题存在,则请求来自PDF查看器,您可以正常发送PDF。

  3. 基本上,处理程序将第一个请求视为HEAD请求,然后如果我们确定请求来自PDF查看器,则使用完整PDF进行响应。我们在这里运行的风险是,如果Microsoft稍后删除该DLNA标头,Edge将无法正确呈现PDF。希望Microsoft能够在他们的浏览器中修复此问题,并且不需要这种解决方法。

答案 1 :(得分:1)

谢谢黑头盔,你救了我的一天。 我在java中实现了解决方案。以下是可能对其他人有帮助的代码。

String userAgent = request.getHeader("user-agent");
System.out.println(userAgent);
if(userAgent.contains("Edge")){
    String dlnaHeader = request.getHeader("getcontentfeatures.dlna.org");
    System.out.println(dlnaHeader);
    if(dlnaHeader == null ){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] result = baos.toByteArray();
        response.setContentType("application/pdf");
        response.setHeader("Content-disposition","inline; ");
        response.setContentLength(result.length);               
        ServletOutputStream sos = response.getOutputStream();
        sos.write(result);
        return null;
    }
}

答案 2 :(得分:0)

谢谢大家,我只想根据您的解决方法将我的VB.NET解决方案放在这里。

Response.Clear()
Response.ClearHeaders()
Response.ClearContent()
Response.Buffer = True
If Request.Headers.Item("User-Agent").Contains("Edge") _
AndAlso IsNothing(Request.Headers.Item("GetContentFeatures.DLNA.ORG")) Then
    'Edge? Send empty output if special header not exist
    Response.ContentType = "application/pdf"
    Dim bTemp As Byte()
    Response.BinaryWrite(bTemp) 'Empty output
    Response.Flush()
    Response.SuppressContent = True
    HttpContext.Current.ApplicationInstance.CompleteRequest()
End If
'Normal process:
Response.ContentType = "application/pdf"
Response.BinaryWrite(pdfArray)
Response.Flush()
Response.SuppressContent = True
HttpContext.Current.ApplicationInstance.CompleteRequest()

答案 3 :(得分:0)

使用Edge 16.16299(Windows Fall Creator更新),此处进行了更改。我们完成了本期中描述的解决方法,并且工作得很好。但是现在使用Edge的新版本(16.16299)它不再起作用了,它发生了,PDF被破坏(0字节大)。如果您在某处实施此解决方法,请务必小心。 你还要注意的是Edge正在做两个像以前一样的请求。

相关问题