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

如何在WebException中获取HTTP StatusCode(状态码)

如何从WebException中获取HTTP状态码?

我来帮你搞定这个问题!你现在遇到的核心问题是:CInt(ex.Status)拿到的是.NET定义的WebExceptionStatus枚举数值(比如你看到的7对应ProtocolError),这不是服务器实际返回的HTTP状态码。要获取401这类真实的状态码,得从WebException的Response属性里入手,具体做法如下:

关键思路

当服务器返回错误状态码时,WebException的Response属性其实是HttpWebResponse类型的实例,我们只需要把它强制转换后,就能直接访问StatusCode属性拿到HTTP状态码。

修改后的代码示例

Catch ex As WebException
    ' 先确认Response是HttpWebResponse类型(处理HTTP协议错误的场景)
    If TypeOf ex.Response Is HttpWebResponse Then
        Dim httpResp As HttpWebResponse = DirectCast(ex.Response, HttpWebResponse)
        
        ' 获取整数形式的HTTP状态码(比如401)
        Dim statusCode As Integer = CInt(httpResp.StatusCode)
        ' 获取状态码对应的文本描述(比如"Unauthorized")
        Dim statusDesc As String = httpResp.StatusDescription
        
        ' 读取服务器返回的JSON响应体
        Dim respContent As String = New StreamReader(httpResp.GetResponseStream()).ReadToEnd()
        
        ' 输出调试信息
        Console.WriteLine($"异常信息: {ex.Message}")
        Console.WriteLine($"HTTP状态码: {statusCode} ({statusDesc})")
        Console.WriteLine($"响应内容: {respContent}")
        
        Return respContent
    Else
        ' 处理非HTTP响应的异常场景
        Console.WriteLine($"非HTTP响应异常: {ex.Message}")
        Return ""
    End If

代码说明

  • 我们先通过TypeOf判断ex.Response的类型,确保后续转换不会出错
  • 转换为HttpWebResponse后,StatusCode是枚举类型,用CInt()可以转成你需要的整数(比如401)
  • 保留了你原来读取响应体的逻辑,同时新增了状态码的获取和输出

这样你就能直接拿到服务器返回的401、404这类真实HTTP状态码,而不是WebExceptionStatus的枚举数值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:12:32