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

C#中403响应体对应处理方法不可用问题咨询

解决C# WebRequest无法获取403响应体的问题

嘿,我懂你碰到的糟心事了——用WebRequest发请求时,遇到403状态码直接就抛异常,连响应体内容都拿不到对吧?这其实是WebRequest的默认脾气:它把非2xx的状态码都认定为错误,直接触发WebException,不会给你直接访问响应内容的机会。不过咱们可以从异常里把响应体“捞”出来,下面是具体的解决办法:

核心思路

当捕获到WebException时,重点看异常的Response属性——它本质就是服务器返回的HttpWebResponse对象,我们可以通过它读取响应流,拿到403的响应体内容。

修改后的Catch代码块

把你的catch部分替换成这段代码就行:

catch (WebException ex)
{
    // 先确认异常里包含服务器的响应对象
    if (ex.Response is HttpWebResponse errorResponse)
    {
        using (StreamReader reader = new StreamReader(errorResponse.GetResponseStream()))
        {
            // 读取完整的403响应体
            string errorResponseBody = reader.ReadToEnd();
            // 这里可以按你的需求处理内容,比如打印日志、解析JSON等
            Console.WriteLine("403响应体内容:");
            Console.WriteLine(errorResponseBody);
        }
        // 记得关闭响应对象释放资源
        errorResponse.Close();
    }
    else
    {
        // 处理没有返回响应的异常情况
        Console.WriteLine($"请求出错:{ex.Message}");
    }
}

额外小建议

要是你用的是.NET Core/.NET 5及以上版本,真心推荐换成HttpClient来发请求——它不会因为非2xx状态码直接抛异常,不管状态码是啥,你都能直接通过HttpResponseMessage.Content拿到响应体,代码会清爽很多:

using (HttpClient client = new HttpClient())
{
    var request = new HttpRequestMessage(HttpMethod.Post, WEBSERVICE_URL);
    request.Headers.Add("Key", _apiKey);
    request.Headers.Add("Sign", genHMAC());
    request.Content = new FormUrlEncodedContent(new Dictionary<string, string>
    {
        {"command", "returnBalances"},
        {"nonce", nonce.ToString()}
    });

    HttpResponseMessage response = await client.SendAsync(request);
    // 直接读取响应体,不用管状态码
    string responseBody = await response.Content.ReadAsStringAsync();
    
    if (!response.IsSuccessStatusCode)
    {
        Console.WriteLine($"请求失败,状态码:{(int)response.StatusCode}");
        Console.WriteLine("响应体:" + responseBody);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:47