如何在Flurl中正确处理204响应
处理Flurl请求Audiocodes SBC API返回204无内容的情况
Flurl的GetJsonAsync在遇到204(无内容)响应时确实会返回null,因为没有可序列化的JSON内容。要正确处理这个场景,核心是先拿到完整的响应对象,再根据状态码分支处理:
方法1:用SendAsync获取响应后处理
先发送请求拿到IFlurlResponse实例,判断状态码后再决定是否反序列化:
var response = await "你的Audiocodes SBC API地址" .WithHeader("Authorization", "Bearer 你的认证令牌") // 根据实际认证方式调整 .SendAsync(HttpMethod.Get); if (response.StatusCode == HttpStatusCode.NoContent) { // 无可用告警时的逻辑,比如返回空列表或空对象 return new List<Alert>(); // 替换成你的告警实体类型 } else { // 正常反序列化JSON响应 return await response.GetJsonAsync<List<Alert>>(); }
方法2:直接获取HttpResponseMessage处理
如果更习惯使用.NET原生的HttpResponseMessage,可以用GetAsync:
var httpResponse = await "你的Audiocodes SBC API地址" .WithHeader("Authorization", "Bearer 你的认证令牌") .GetAsync(); if (httpResponse.StatusCode == HttpStatusCode.NoContent) { return Enumerable.Empty<Alert>(); } else { return await httpResponse.Content.ReadFromJsonAsync<List<Alert>>(); }
为什么之前找不到状态码?
GetJsonAsync是Flurl的快捷方法,它直接跳过了响应对象的获取环节,内部完成了"发送请求→读取内容→反序列化"的流程,所以你拿不到状态码。必须先通过SendAsync或GetAsync拿到响应实例,才能访问StatusCode属性。
另外要注意,204属于成功状态码,Flurl不会抛出异常,所以不需要额外的异常捕获逻辑,只需要根据状态码做分支处理即可。
内容的提问来源于stack exchange,提问作者acskr
相关产品推荐
相关产品推荐

