C#从webservice下载文件
我有一个web服务,比如从服务器下载zip文件。当我通过web浏览器打开URL时,我可以正确下载zip文件。问题是当我试图通过桌面应用程序下载zip文件时。我使用以下代码下载:C#从webservice下载文件,c#,asp.net-web-api,webclient,webclient-download,C#,Asp.net Web Api,Webclient,Webclient Download,我有一个web服务,比如从服务器下载zip文件。当我通过web浏览器打开URL时,我可以正确下载zip文件。问题是当我试图通过桌面应用程序下载zip文件时。我使用以下代码下载: WebClient webClient = new WebClient(); webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); webClient.DownloadProgressChanged += new Dow
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri(@"http://localhost:9000/api/file/GetFile?filename=myPackage.zip"), @"myPackage.zip");
测试之后,我下载了myPackage.zip,但它是空的,0 KB。有关此示例或任何其他服务器代码+客户端代码示例的任何帮助?您可以尝试改用HttpClient。通常,它更方便
var client = new HttpClient();
var response = await client.GetAsync(@"http://localhost:9000/api/file/GetFile?filename=myPackage.zip");
using (var stream = await response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo("myPackage.zip");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
这里只是一个正常检查:您是否在等待异步请求完成?是否调用过
ProgressChanged
?在调试器中进行验证。如果线程(或主机进程)在传输第一个数据块之前终止,下载将被中止,这将解释文件大小为零的原因。@AlexanderToptygin如果正在响应事件,他是否需要这样做?请使用DownloadFile而不是DownloadFileAsync,以确保安全。告诉我们它是否解决了这个问题?我没有使用wait,它说的是“不能等待无效”。改变的进度不是“永远”,而是“完全的是”。这正是我所需要的。谢谢(顺便说一句,“方便”是相对的。我本可以在Perl中使用LWP::UserAgent模块在一行代码中完成所有这些,但我们必须使用我们拥有的。):-)这很好,但应该指出,应该重用客户机,而不是在每次使用后创建一个新实例并进行处理。