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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:02:41