You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebClient异步上传文件后获取响应头返回null如何解决

问题根因

你调用的UploadFileAsync是异步非阻塞方法,代码执行到读取wc.ResponseHeaders时,上传请求还未完成、服务端响应尚未返回,因此该属性返回值为null。

解决方案

方案1:使用同步上传方法

如果不需要异步进度监控,可直接替换为同步上传方法,方法执行完成后响应头已完成赋值:

public void UploadPart(string filePath, string preSignedUrl)
{
   WebClient wc = new();
   // 同步上传会阻塞到上传完成
   wc.UploadFile(new Uri(preSignedUrl), "PUT", filePath);

   WebHeaderCollection myWebHeaderCollection = wc.ResponseHeaders;
   System.Diagnostics.Debug.WriteLine(myWebHeaderCollection);
}

方案2:在异步完成事件中读取响应头

如果需要保留异步进度监听能力,将读取响应头的逻辑移到UploadFileCompleted事件回调中即可:

public void UploadPart(string filePath, string preSignedUrl)
{
   WebClient wc = new();
   wc.UploadProgressChanged += WebClientUploadProgressChanged;
   wc.UploadFileCompleted += (sender, e) => 
   {
       // 回调触发时上传已完成,可正常读取响应头
       WebHeaderCollection myWebHeaderCollection = wc.ResponseHeaders;
       System.Diagnostics.Debug.WriteLine(myWebHeaderCollection);
       // 原有WebClientUploadCompleted逻辑保留
       WebClientUploadCompleted(sender, e);
   };
   wc.UploadFileAsync(new Uri(preSignedUrl), "PUT", filePath);
}
补充说明

WebClient是.NET Framework时代的遗留API,在.NET Core 2.1及更高版本中,更推荐使用HttpClient实现上传逻辑,功能更灵活性能也更优。

内容的提问来源于stack exchange,提问作者JMR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 02:15:03