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

时间:2015-10-28 18:38:55

标签: c# url uri webclient downloadfile

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

我的公司使用基于网络的应用程序来安排报告的生成。该服务通过电子邮件发送可以单击的URL,并立即开始“打开另存为取消”对话框。我正在尝试使用C#脚本作为Visual Studio项目的一部分自动执行下载这些报告的过程(最终目标是在SQL Server中导入这些报告)。

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

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

错误讯息:

“无效的URI:无法解析主机名。”

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仍为null - TryCreate失败。

我尝试过做webrequest / webresponse / WebStream,但仍无法找到主机。

我尝试过包含下载URL(如我的第一个代码示例所示)和下载URL +文件名(如我的第二个代码示例所示)。如果我手动执行此操作,我不需要URL中的文件名来启动下载。我也尝试用文件名替换URL的“report.tab”部分,但无济于事。

非常感谢帮助,因为我对这个问题的想法很少。我留下的唯一想法是,我的URL中的一个特殊字符可能会妨碍我,但我不知道将会是哪一个或如何正确处理它。

提前致谢!

1 个答案:

答案 0 :(得分:3)

我的第一个想法是你的URI反斜杠被解释为转义字符,导致评估后的无意义结果。我会尝试快速测试每个反斜杠本身是否被转义(即" \"而不是" \"在每个实例中)。我还有点疑惑为什么你的URI没有使用正斜杠......?

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

参考:Uri Constructor on MSDN