【问题标题】:WebClient.DownloadFile - Invalid URI: The hostname could not be parsedWebClient.DownloadFile - 无效的 URI:无法解析主机名
【发布时间】:2016-01-28 16:45:37
【问题描述】:

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

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

我在使用 WebClient 开始下载此文件时遇到了极大的困难这是我尝试过的任何方法中最接近的:

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

错误信息:

“无效的 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 仍然为空 - TryCreate 失败。

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

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

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

提前致谢!

【问题讨论】:

    标签: c# url uri webclient downloadfile


    【解决方案1】:

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

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

    参考:Uri Constructor on MSDN

    【讨论】:

    • 斜线被@"..." 转义,导致字符串被视为字符串文字。但是,您确实一针见血——不知何故,正斜杠被转换为反斜杠(我可能在编写大量本地文件路径时无意中这样做了)。给几个人看了这个,没有人注意到!非常感谢你敏锐的眼光!这是生活中的小事......
    猜你喜欢
    • 2011-05-11
    • 2011-02-18
    • 2023-03-09
    • 1970-01-01
    • 2017-08-04
    • 2015-06-03
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多