WebClient.DownloadFile - 无效的 URI:无法解析主机名

WebClient.DownloadFile - Invalid URI: The hostname could not be parsed

所以我尝试了几种不同的格式并产生了不同的结果。我将在下面包含所有相关信息。

我的公司使用基于 Web 的应用程序来安排报告的生成。该服务会通过电子邮件发送 URL,点击后会立即显示 "Open Save As Cancel" 对话框。作为 Visual Studio 项目的一部分,我正在尝试使用 C# 脚本自动下载这些报告(最终目标是将这些报告导入 SQL 服务器)。

我在使用 WebClient 启动此文件的下载时遇到了可怕的困难这是我尝试过的任何方法中最接近的:

*注意:我从 URL 中删除了所有识别信息,但保留了所有特殊字符和基本架构。希望这将是保护机密信息和让您足以理解我的困境之间的一个愉快的媒介。当手动复制并粘贴到 Internet Explorer 的地址栏时,URL有效。

错误信息:

"Invalid URI: The hostname could not be parsed."

public void Main()
{
using (var wc = new System.Net.WebClient())
{
wc.DownloadFile(
new Uri(@"http:\webapp.locality.company.com\scripts\rds\cgigetf.exe?job_id=3058352&file_id=1&format=TAB\report.tab"), 
@"\server\directory\folder1\folder2\folder3\...\...\...\rawfile.tab");
        }
   }

另请注意,我已尝试设置:

        string sourceUri = @"http:\webapp.locality.company.com\scripts\rds\cgigetf.exe?job_id=3058352&file_id=1&format=TAB\report.tab\abc123_3058352.tab";
        Uri uriPath;
        Uri.TryCreate(sourceUri, UriKind.Absolute, out uriPath);

但 uriPath 仍然为空 - TryCreate 失败。

我已尝试执行 webrequest / webresponse / WebStream,但仍然找不到主机。

我尝试包括下载 URL(如我的第一个代码示例)和下载 URL + 文件名(如我的第二个代码示例)。如果我手动进行下载,则不需要 URL 中的文件名来启动下载。我也尝试用文件名替换 URL 的 "report.tab" 部分,但无济于事。

非常感谢您的帮助,因为我 运行 完全没有考虑过这个问题。我剩下的唯一想法是,也许我的 URL 中的一个特殊字符妨碍了,但我不知道会是哪个或如何正确处理它。

提前致谢!

我的第一个想法是您的 URI 反斜杠被解释为转义字符,导致评估后出现无意义的结果。我会尝试一个快速测试,其中每个反斜杠都作为自身进行转义(即在每个实例中使用“\”而不是“\”)。我也有点困惑为什么你的 URI 没有使用正斜杠...?

// Create an absolute Uri from a string.
Uri absoluteUri = new Uri("http://www.contoso.com/");

参考:Uri Constructor on MSDN