c# - 如何捕获重新抛出的异常?
问题描述
我有以下代码:
try
{
await _policyService.QueuePayment();
}
catch (Exception ex)
{
var slackError = new ErrorNotificationMessage("{ex.Message}");
await Notify(slackError);
}
如果异常是安全异常,我想提供更多详细信息并将其记录到 Slack,因此我扩展了这个 try/catch 块,如下所示:
try
{
await _policyService.QueuePayment();
}
catch (SecurityException ex)
{
throw new Exception("detailed message", ex);
}
catch (Exception ex)
{
var slackError = new ErrorNotificationMessage("{ex.Message}");
await Notify(slackError);
}
但是,这不会捕获重新抛出的异常并将其记录到 Slack。我在这里想念什么?
解决方案
但是,这不会捕获重新抛出的异常并将其记录到 Slack。我在这里想念什么?
当我们显式抛出异常时,可以通过将方法调用包含在 try catch 块中,在调用者端捕获它。我们不能在同一方法中从 catch 块中抛出和捕获异常,除非我们添加另一个在这里实际上没有意义的 try catch。
您应该做的是直接抛出该异常,例如:
try
{
await _policyService.QueuePayment();
}
catch (Exception ex)
{
if(ex is SecurityException)
{
// for security exception do something different
}
else
{
var slackError = new ErrorNotificationMessage("{ex.Message}");
await Notify(slackError);
}
}
推荐阅读
- android - org.apache.http.legacy 不适用于 API 28
- php - 无法将缓存写入数据库 Laravel
- python - 在python中用相同的根替换变量文本
- javascript - 如何使用 javascript 打开 Adobe Acrobat DC 中的导航窗格?
- java - mySQL - 获取最后添加的 ID
- c - 在行中找到回文并显示它们
- javascript - 如何在 Angular 7 中使用 JavaScript 代码?
- javascript - 具有最小时间的 jQuery 预加载器
- c# - 删除早于修复日期的项目并替换第一次出现
- c - 查找最大数 (C) - 代码不起作用