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

如何在.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:35:18