【发布时间】:2016-08-15 20:20:24
【问题描述】:
我有一份似乎工作正常的报告,但是当我尝试在我的 asp.net MVC 应用程序中下载它时,我得到了 500。我只是尝试使用 URL 访问下载它的 pdf 版本。为此,我执行以下操作:
WebClient client = new WebClient();
NetworkCredential nwc = new NetworkCredential(ConfigurationManager.AppSettings["SSRSUserName"], ConfigurationManager.AppSettings["SSRSPassword"]);
client.Credentials = nwc;
string paramList = "&OrderId=" + orderId;
string reportURL = ConfigurationManager.AppSettings["SSRSBaseUrl"] +
ConfigurationManager.AppSettings["SSRSReport"] +
"&rs:Command=Render&rs:Format=PDF" +
paramList;
try
{
byte[] reportBytes = client.DownloadData(reportURL);
}
为了验证我的报告是否正常工作,我将生成的 reportURL 字符串放入浏览器中,果然我的报告完美下载了。
有人知道为什么我会在我的应用程序中获得 500,但 pdf 会在我的应用程序之外使用相同的 URL 完美下载吗?他们是我缺少的一些配置吗?
服务器版本为 SQL Server 2016
【问题讨论】:
-
两个建议,有点反复试验。不要使用字符串,而是将 URL 定义为 Uri 并将其传递给
DownloadData。我想知道DownloadData内部是否对 URL 参数的编码有期望,WebClient的默认编码会导致 URL 格式错误。另一种是通过设置类似如下的用户代理来模拟浏览器:client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); -
@JonathonOgden 我试图将我的 url 字符串切换为 uri,但没有任何运气。在尝试模拟浏览器时,我在您提供的行中遇到了几个编译错误。 VS 说:意外字符“。知道为什么不能编译吗?谢谢
-
@JonathonOgden 不确定我做了什么,但我得到了编译,但在模拟浏览器时它仍然无法工作。
-
好的,还有一个问题我忽略了。您是否有任何特殊原因要下载数据而不是文件本身?你打算用它做什么?如果您只想以编程方式下载并保存文件,请改用
DownloadFile。 -
@JonathonOgden 我不只是下载和保存文件。获得文件后,我立即使用 PrintDocument 将其发送到打印机。有没有办法用文件做到这一点?对我来说,只下载数据并将其传递给 PrintDocument 更有意义。
标签: asp.net asp.net-mvc reporting-services ssrs-2016