如何在C#的catch代码块中获取异常对应的状态码?
嘿,这个问题我做Web开发时也碰到过,具体怎么获取状态码得看你用的框架和异常类型,不过常见的处理方式大概分这几种:
获取捕获异常的状态码
1. 直接访问异常对象的内置属性
很多主流Web框架(比如Express、NestJS)抛出的HTTP异常,都会自带statusCode或者status属性,你可以直接读取,记得加个兜底值避免报错:
try { await next(context); } catch (ex) { // 优先取statusCode,没有就用status,默认500服务器错误 const statusCode = ex.statusCode || ex.status || 500; console.log(`捕获到的状态码:${statusCode}`); }
2. 自定义异常类的处理方案
如果你们项目用了自定义的异常类,建议在类里预先定义好statusCode属性,捕获时直接判断类型再读取:
比如先定义自定义异常:
class HttpException extends Error { constructor(message, statusCode) { super(message); this.statusCode = statusCode; this.name = 'HttpException'; } }
然后在catch块里处理:
try { await next(context); } catch (ex) { if (ex instanceof HttpException) { console.log(`异常状态码:${ex.statusCode}`); } else { // 处理其他非HTTP类型的异常 console.log('非HTTP异常,默认状态码:500'); } }
3. 应急方案:从异常消息中提取(不推荐)
如果异常对象没有自带状态码属性,只能从消息文本里提取的话,可以用正则匹配,但这种方式不太可靠(毕竟消息格式可能变动),只适合应急场景:
try { await next(context); } catch (ex) { // 匹配消息里的3位数字状态码 const statusMatch = ex.message.match(/(\d{3}):/); const statusCode = statusMatch ? parseInt(statusMatch[1], 10) : 500; console.log(`提取到的状态码:${statusCode}`); }
内容的提问来源于stack exchange,提问作者shamim
相关产品推荐
相关产品推荐

