使用C# HttpClient读取文件内容失败,显示对象信息求排查(VS2019)
代码错误分析及修正
你的代码存在三个核心问题,导致无法正确获取文件内容:
- 异步操作未正确等待:
GetAsync和GetStringAsync都是异步方法,返回的是Task或Task<string>对象。直接调用ToString()只会输出该对象的类型信息,而非实际的文件内容。同时手动写死循环轮询异步状态的做法既低效又不符合异步编程规范。 - 重复发起网络请求:已经通过
GetAsync请求了目标资源,后续又调用GetStringAsync再次请求同一地址,完全属于冗余操作。 - UI线程阻塞风险:在窗体加载事件中直接用轮询方式等待异步操作,可能导致UI线程假死,影响用户体验。
修正后的代码
namespace WebReader { public partial class frm_Main : Form { public frm_Main() { InitializeComponent(); } // 将事件处理方法声明为异步方法 private async void frm_Main_Load(object sender, EventArgs e) { using var clt = new HttpClient(); // 等待异步请求完成,获取响应对象 var res = await clt.GetAsync("https://daera.net/dmoon/testfile.txt"); // 验证请求是否成功,失败则抛出异常 res.EnsureSuccessStatusCode(); // 从响应内容中读取字符串 var msg = await res.Content.ReadAsStringAsync(); MessageBox.Show(msg); } } }
关键修正说明
- 异步方法改造:将
frm_Main_Load声明为async void(WinForms事件处理方法允许使用该异步模式),通过await关键字等待异步操作完成,替代手动轮询逻辑。 - 复用响应对象:利用已获取的
HttpResponseMessage,通过Content.ReadAsStringAsync()读取内容,避免重复发起网络请求。 - 添加错误校验:
res.EnsureSuccessStatusCode()会在请求返回错误状态码(如404、500)时抛出异常,便于排查请求失败的问题。
内容的提问来源于stack exchange,提问作者Youstay Igo
相关产品推荐
相关产品推荐

