如何在.NET Standard 2.1中从HttpRequestException获取状态码?
在.NET Standard 2.1中从HttpRequestException获取HTTP状态码的替代方案
方案1:从HttpRequestException的InnerException提取WebException
在.NET Standard 2.1中,HttpRequestException本身没有暴露StatusCode属性,但它的InnerException通常会包装WebException。你可以在捕获HttpRequestException后,检查内层异常来获取状态码:
try { // 执行你的HTTP请求逻辑(如HttpClient.SendAsync) } catch (HttpRequestException ex) { if (ex.InnerException is WebException webException) { if (webException.Response is HttpWebResponse httpResponse) { HttpStatusCode statusCode = httpResponse.StatusCode; // 在这里处理获取到的状态码 } } }
方案2:提前检查HttpResponseMessage的状态(推荐)
与其依赖异常获取状态码,不如在请求返回后直接检查HttpResponseMessage的状态,这种方式更直观,也避免了异常包装的问题:
var httpClient = new HttpClient(); var response = await httpClient.GetAsync("目标请求地址"); // 先判断请求是否成功,失败时直接获取状态码 if (!response.IsSuccessStatusCode) { HttpStatusCode statusCode = response.StatusCode; // 根据状态码做对应处理,也可以自定义异常抛出 // throw new CustomHttpException(statusCode, "请求失败"); } // 处理成功的响应内容 var content = await response.Content.ReadAsStringAsync();
为什么直接捕获WebException不生效?
在.NET Standard的HttpClient实现中,底层的WebException会被包装成HttpRequestException的InnerException抛出,而非直接抛出WebException,所以单独的catch (WebException)代码块不会被触发。
内容的提问来源于stack exchange,提问作者Häkkebräker
相关产品推荐
相关产品推荐

