错误捕捉过滤器 .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 ...
随机推荐
- 毕业三年,如何达到月薪30K?我想跟你聊聊!!
写在前面 很多读者私信问我,自己工作三多年了,随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符.想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的标准,即使投了简历也没人来通知 ...
- idea run dashbord使用
idea 中使用dashbord可以迅速开启多个服务方便进行本地测试 开启步骤 1. 打开idea菜单 view-> toolWindows ->service 选项 2. 打开底部的se ...
- FaaS,未来的后端服务开发之道
说 FaaS 先要说说 PaaS 平台即服务(Platform as a Service)是一种云计算服务,提供运算平台与解决方案堆栈即服务.在云计算的典型层级中,平台即服务层介于软件即服务与基础设施 ...
- SpringBoot全局时间转换器
SpringBoot全局时间转换器 日常开发中,接收时间类型参数处处可见,但是针对不同的接口.往往需要的时间类型不一致 @DateTimeFormat(pattern = "yyyy-MM- ...
- java零基础之--JDK安装篇
---恢复内容开始--- 很多零基础学习者在开始学习java中很难理解JDK的安装和配置,以下是基于Windows 7 的安装配置流程(Windows 10类似) 1. 在安装之前我们先了解几个名词: ...
- CyclicBarrier(栅栏)的用法详解及与countDownLatch用法区别
CyclicBarrier适用于这样的情况:你希望创建一组任务,它们并行的执行工作,然后在进行下一步步骤之前等待,直至所有任务都完成,它使得所有的并行任务都将在删栏出列队,因此可以一致的向前移动. 当 ...
- hashmap的简易实现,基本实现PUT GET
p.p1 { margin: 0; font: 12px Menlo; color: rgba(79, 118, 203, 1) } /*简易版的HASHMAP包括基本的GET PUT思想 * 从数 ...
- 第六章节 BJROBOT 动态导航壁障
导航前说明:一定要确保你小车在构建好地图的基础上进行! 1.把小车平放在你想要构建地图区域的地板上,打开资料里的虚拟机,打开一个终端, ssh 过去主控端启动 roslaunch znjrobot b ...
- Head First 设计模式 —— 03. 装饰器 (Decorator) 模式
思考题 有如下类设计: 如果牛奶的价钱上扬,怎么办?新增一种焦糖调料风味时,怎么办? 造成这种维护上的困难,违反了我们之前提过的哪种设计原则? P82 取出并封装变化的部分,让其他部分不收影响 多用组 ...
- AI算法测评事项
前言 注:大概2017年-2018年国内人工智能热度达到顶峰,随后热度开始逐渐减少.2018年前人工智能被投资界.学术界.工业界和媒体炒的特别热,各大企业都想尝试一下深度学习技术在业务场景的应用.试水 ...