【问题标题】:WebClient Download file got error: Object reference not set to an instance of an objectWebClient 下载文件出错:对象引用未设置为对象的实例
【发布时间】:2012-05-04 22:54:55
【问题描述】:
WebClient ws = new WebClient();
ws.Credentials = new System.Net.NetworkCredential(username, password, domain);
 ws.DownloadFile("https://xxxx.xxxx.com/xxxx.xml", @"C:\Windows\TEMP\Downloaded.xml");

我收到错误“对象引用未设置为对象的实例”。 有人知道为什么吗?

如果我将“https://xxxx.xxxx.com/xxxx.xml”复制到浏览器,它可以下载并保存到“C:\Windows\TEMP\Downloaded.xml”,但我的程序不能,只抛出错误。

以前我使用相同的代码成功下载了文件,但那是另一个带有“http”的站点。不确定是否是问题的原因。

【问题讨论】:

  • 你确定是httpS吗?
  • 您是否也正确设置了域?
  • 如果这是文字代码,那么只有用户名、密码或域可以为空。
  • 谢谢@HenkHolterman 用户名、密码和域名不为空,我可以从追踪中看到。
  • 嗨@Emged我不确定是否是https导致问题,域是正确的。

标签: c# asp.net webclient


【解决方案1】:

使用 uri 而不是使用原始 url

Uri URL = urlAddress.StartsWith("https://", StringComparison.OrdinalIgnoreCase) ? new Uri(urlAddress) : new Uri("https://" + urlAddress);
await myWebClient.DownloadFileTaskAsync(URL, location);

【讨论】:

    【解决方案2】:

    我在使用 WebClient 类时遇到了同样的问题。我所做的是构建一个 URI 而不是这样的字符串路径(我这里没有做过,但你也可以在 UriBuilder 中添加用户名和密码):

    var uriBuild = new UriBuilder { Host host, Path = downloadPath };
    client.DownloadFileAsync(uriBuild.Uri, localPath);
    

    主机和下载路径是分开的,例如:

    string host = "ftp.sunet.se"
    string downloadPath = "/pub/unix/databases/relational/mysql/Downloads/MySQL-5.5/mysql-5.5.22-win32.msi"
    

    让我知道这是否也适合您! 干杯:)

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 2011-07-09
      • 2012-08-31
      • 2011-11-21
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多