如何在try-catch块中捕获特定403错误的WebException?
如何在WebException捕获块中专门处理403错误
当然可以实现!你当前的代码已经判断了协议错误,但还需要进一步提取HTTP响应的状态码,才能精准定位403(权限禁止)错误。这里是修改后的代码,我会一步步给你解释:
catch (WebException e) { if (e.Status == WebExceptionStatus.ProtocolError) { // 先确保响应对象不为null,避免空引用异常 if (e.Response is HttpWebResponse response) { if (response.StatusCode == HttpStatusCode.Forbidden) { // 这里专门处理403错误的逻辑 Logger.Error("遇到403权限禁止错误:" + e.ToString()); Console.WriteLine("权限不足,请检查你的访问凭证!"); Console.ReadKey(true); return; } else { // 处理其他协议错误(比如404、500等) Logger.Error($"遇到协议错误,状态码:{(int)response.StatusCode},详情:{e.ToString()}"); Console.ReadKey(true); return; } } } // 如果不是协议错误或者无法识别的响应,重新抛出异常 throw; }
关键说明:
- 我们通过
e.Response is HttpWebResponse response安全地将响应转换为HTTP响应对象,避免空引用问题 - 使用
HttpStatusCode.Forbidden替代硬编码的403,让代码更具可读性和可维护性 - 针对403错误单独编写处理逻辑(比如自定义日志提示、用户友好提示),其他协议错误可以统一处理或者再细分
- 如果异常不属于协议错误范畴,仍然会重新抛出,保证异常链的完整性
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

