错误捕捉过滤器 .NetCore版
前言
继承ExceptionFilterAttribute后,重写OnException函数。
统一捕捉所有报错,格式化返回前端。
代码实现
基类控制器
在基类控制器上添加[ErrorCatch]特性:
(.NetCore3中没有JsonResult,从使用习惯出发,使用自己写的JsonContentResultBuilder返回JSON格式的ContentResult)
注意:配合之前的编写的(参数模型检验过滤器 .NetCore版),可以将参数校验的报错统一用此特性格式化之后返回
/// <summary>
/// 基类控制器
/// </summary>
[ParaModelValidate]
[ErrorCatch]
public class BaseController : ControllerBase
{
public ContentResult JsonResult(dynamic data = null)
{
ContentResult result = JsonContentResultBuilder.BuildViewJsonResult(data);
return result;
}
}
控制器接口
public class DemoController : BaseController
{
public ActionResult Login(DemoParaModel paraModel)
{
throw new Exception("报错了");
return JsonResult(ss);
}
}
ErrorCatchAttribute特性
/// <summary>
/// 错误捕捉过滤器 NetCore版
/// </summary>
public class ErrorCatchAttribute : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext actionExecutedContext)
{
ContentResult result = JsonContentResultBuilder.BuildViewJsonResult(null, StatuCode.Fail, actionExecutedContext.Exception.Message);
actionExecutedContext.Result = result;
}
}
JsonContentResultBuilder
public class JsonContentResultBuilder
{
public static ContentResult BuildViewJsonResult(dynamic data, StatuCode statuCode= StatuCode.Success, string errorMessage = null)
{
string statuDescription = statuCode.Description();
string separator = !string.IsNullOrEmpty(statuDescription) ? ":" : string.Empty;
JsonResult result = new JsonResult
{
Code = statuCode,
Message = !string.IsNullOrEmpty(errorMessage)
? $"{statuDescription}{separator}{errorMessage}"
: statuDescription,
Data = data,
};
return new ContentResult
{
ContentType = "application/json",
Content = JsonConvert.SerializeObject(result)
};
}
}
JsonResult
public class JsonResult
{
public StatuCode Code { get; set; }
public string Message { get; set; }
public object Data { get; set; }
}
public static class ErrorCodeHelper
{
public static string Description(this StatuCode enumName)
{
return EnumHelper.GetDescriptionByName(enumName);
}
}
public enum StatuCode
{
[Description("成功")]
Success = 00000000,
[Description("失败")]
Fail = 00000001
}
错误捕捉过滤器 .NetCore版的更多相关文章
- 参数模型检验过滤器 .NetCore版
最近学习 .NETCore3.1,发现过滤器的命名空间有变化. 除此以外一些方法的名称和使用方式也有变动,正好重写一下. 过滤器的命名空间的变化 原先:System.Web.Http.Filters; ...
- 捕捉过滤器(CaptureFilters)和显示过滤器(DisplayFilters)--Wireshark
Wireshark的基本使用——过滤器 前言 网络上关于Wireshark的教程已有不少,博主就简单介绍一下Wireshark分析数据包时最重要的技巧之一的过滤器..一次性嗅探到的数据包有很多,想要高 ...
- 【Flask】 python学习第一章 - 3.0 正则转换和错误捕捉
3.1正则转换器定义 Class RegexConverter(BaseConverter): regex = "[0-9]{6}" app.url_map.converters[ ...
- ASP 错误捕捉,处理
Asp利用 On Error Resume Next捕捉异常,根据Err.Number判断是否有错误 注:On Error Goto 0取消捕捉异常 模板文件页面 <% Response.Buf ...
- python学习之调试 错误捕捉及处理
1 捕捉错误:try except Err_Case1: pass except Err_Case2: pass else: 正常情况: finally: 无论是否异常都要 处理的代码 w ...
- Python 之 try...except...错误捕捉
Python常见异常类型大概分为以下类: 1.AssertionError:当assert断言条件为假的时候抛出的异常 2.AttributeError:当访问的对象属性不存在的时候抛出的异常 3.I ...
- 擅用ABAP错误捕捉,避免系统Dump
有时候我们在写程序时,会因为计算公式不符合算术表达式,计算公式的字段值不是纯数值等等问题造成程序dump,这个时候我们在无法避免字段赋值错误的情况下,又不想程序dump可以采取catch异常的方法进行 ...
- WinForm C#全局错误捕捉处理【整理】
static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...
- php错误捕捉
<?php //禁止错误输出 error_reporting(0); //设置错误处理器 set_error_handler('errorHandler'); register_shutdown ...
随机推荐
- VueJs(15)--- Webstorm+Chrome 调试Vue项目
Webstorm+Chrome 调试Vue项目 前言 在项目开发中,Debug模式是非常有必要的,后端对于IDEA工具而言Debug模式非常方便,但前端WebStorm而言如果启用Debug模式是需要 ...
- easyui中清空table列表中数据
方法一 var item = $('#filegrid').datagrid('getRows');//获取类表中全部数据if (item) { for (var i = item.length - ...
- hive向es推送数据
第一步:首先要保证网络是通的,很多公司里子网遍布,要和运维和工程侧同事确认好网络是通的,es的地址可以通过curl es地址的方式测试一下. 第二步:下载需要的jar包,必须的是es-hadoop的包 ...
- [leetcode]79.Search Word 回溯法
/** * Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...
- 使用代码管理工具(git)管理代码的常用指令合集
create a new repository on the command line echo "# test" >> README.md git init git ...
- Mac苹果电脑安装虚拟机
Mac上的虚拟机推荐安装 Parallel Desktop For Mac 1.安装Parallel Desktop 2.下载Windows7 3.用Parallel Desktop安装Window ...
- 你的项目中使用过哪些JSTL标签?
项目中主要使用了JSTL的核心标签库,包括< c:if>.< c:choose>.< c: when>.< c: otherwise>.< c:f ...
- Linux服务器上搭建测试环境(war包+tomcat)
悟空CRM项目环境部署(Java war项目) 在/root目录下创建一个文件夹(名字自取). ls命令查看一下是否创建成功,看到了新建的文件夹说明创建成功. tomcat和war包的准备:可以使用X ...
- Vue知识点精简汇总
一. 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码组件是自定义元素(对象) 2. 定义组件的 ...
- TurtleBot3使用课程-第三节a(北京智能佳)
目录 1.[第5类]操纵 2 1.1 软件的安装 2 1.2 硬件设置 2 1.3 打开CR设置 4 1.4 TurtleBot3 提出 5 1.4.1运行 5 1.4.2 Turtle Bot3模型 ...