使用WebClient从SSRS报告下载CSV文件

时间:2016-08-24 13:30:58

标签: vb.net csv reporting-services webclient downloadfile

我正在尝试使用以下代码从SSRS报告中下载csv文件。

Const URI As String = "https://blah.blah.com/blah/_layouts/15/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/blah/Production%20Reports/The_File.rdl&rs:format=csv"
Const DESTINATION As String = "C:\MyFile.csv"

Using myWebClient As WebClient = New WebClient()
    With myWebClient
        .Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
        .Headers.Add("Accept-Encoding", "gzip, deflate, sdch, br")
        .Headers.Add("Accept-Language", "en-US,en;q=0.8")
        .Headers.Add("Content-Disposition", "attachment; filename=%22The%5FFile.csv%22")
        .Headers.Add("Content-Encoding", "gzip")
        .Headers.Add("Content-Type", "text/csv")
        .Headers.Add("Vary", "Accept-Encoding")
        .Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36")
        .Headers.Add("Upgrade-Insecure-Requests", "1")
        .Headers.Add("Referer", URI)
        .Headers.Add("Cache-Control", "private")

        .Credentials = New NetworkCredential("<my username>", "<my password>")
        .DownloadFile(URI, DESTINATION)
    End With
End Using

问题是下载的文件不是csv文件。当我在任何文本编辑器中打开它时,我看到的只是“垃圾”字符,似乎正在进行某种编码。如果我注释掉“Accept-Encoding”标题并重新运行代码,我会得到生成的HTML页面的代码 - 而不是我需要的csv文件。有谁知道如何正确下载文件?顺便说一下,我不确定我添加的所有标题都是必要的。

1 个答案:

答案 0 :(得分:0)

您需要更改URI常量:

Const URI As String = "https://blah.blah.com/blah/_layouts/15/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/blah/Production%20Reports/The_File.rdl&rs:format=csv"

对此:

Const URI As String = "https://blah.blah.com/blah/_layouts/15/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/blah/Production%20Reports/The_File.rdl&rs:format=csv&rs:Command=Render"

您错过了Uri的Command=Render部分。