gpt4 book ai didi

c# - 浏览器不是以 PDF 格式显示来自 SSRS 服务器的报告,而是显示来自 Web 服务器的原始响应

转载 作者:可可西里 更新时间:2023-11-01 17:34:02 26 4
gpt4 key购买 nike

这是我用来以 PDF 格式显示来自 SSRS 服务器的报告的代码。

var reportServerUrl = new Uri(string.Format("{0}?{1}{2}&rs:aCommand=Render&rs:Format=pdf", 
ConfigurationManager.AppSettings("ReportServerURL"),
ConfigurationManager.AppSettings("ReportFolder"), ItemPath));

var wcli = new WebClient();
wcli.Credentials = CustomReportCredentials.WebClientCredentials;
var fileBuffer = wcli.DownloadData(reportServerUrl);

if (fileBuffer != null)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", fileBuffer.Length.ToString());
Response.BinaryWrite(fileBuffer);
}

它大部分时间都有效。但是,有时当我单击一个链接时,我得到的不是 PDF 格式的报告,而是一些奇怪的结果,具体取决于浏览器。在 CHROME 中,我正在获取页面的源代码。在 IE 中,我得到原始响应 + 一些奇怪的字符(见图)。然后页面超时。

enter image description here

老实说,我不知道为什么会这样。

感谢您的帮助。

最佳答案

您看到的是一个原始的二进制 HTTP 响应,包括 header 和负载(就是那些奇怪字符的组成部分),这些响应被解释为 HTML。我认为您在这里缺少的是对 Response.Clear() 的调用设置标题后:

if (fileBuffer != null)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", fileBuffer.Length.ToString());
Response.Clear();
Response.BinaryWrite(fileBuffer);
}

如果不这样做,将保留网络服务器的默认 header 。

话虽如此,我认为您真的不需要设置有效载荷的内容长度。请参阅 Response.Flush() 的示例.

关于c# - 浏览器不是以 PDF 格式显示来自 SSRS 服务器的报告,而是显示来自 Web 服务器的原始响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com