前言

继承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版的更多相关文章

  1. 参数模型检验过滤器 .NetCore版

    最近学习 .NETCore3.1,发现过滤器的命名空间有变化. 除此以外一些方法的名称和使用方式也有变动,正好重写一下. 过滤器的命名空间的变化 原先:System.Web.Http.Filters; ...

  2. 捕捉过滤器(CaptureFilters)和显示过滤器(DisplayFilters)--Wireshark

    Wireshark的基本使用——过滤器 前言 网络上关于Wireshark的教程已有不少,博主就简单介绍一下Wireshark分析数据包时最重要的技巧之一的过滤器..一次性嗅探到的数据包有很多,想要高 ...

  3. 【Flask】 python学习第一章 - 3.0 正则转换和错误捕捉

    3.1正则转换器定义 Class RegexConverter(BaseConverter): regex = "[0-9]{6}" app.url_map.converters[ ...

  4. ASP 错误捕捉,处理

    Asp利用 On Error Resume Next捕捉异常,根据Err.Number判断是否有错误 注:On Error Goto 0取消捕捉异常 模板文件页面 <% Response.Buf ...

  5. python学习之调试 错误捕捉及处理

    1 捕捉错误:try except    Err_Case1: pass except    Err_Case2: pass else: 正常情况: finally: 无论是否异常都要 处理的代码 w ...

  6. Python 之 try...except...错误捕捉

    Python常见异常类型大概分为以下类: 1.AssertionError:当assert断言条件为假的时候抛出的异常 2.AttributeError:当访问的对象属性不存在的时候抛出的异常 3.I ...

  7. 擅用ABAP错误捕捉,避免系统Dump

    有时候我们在写程序时,会因为计算公式不符合算术表达式,计算公式的字段值不是纯数值等等问题造成程序dump,这个时候我们在无法避免字段赋值错误的情况下,又不想程序dump可以采取catch异常的方法进行 ...

  8. WinForm C#全局错误捕捉处理【整理】

    static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...

  9. php错误捕捉

    <?php //禁止错误输出 error_reporting(0); //设置错误处理器 set_error_handler('errorHandler'); register_shutdown ...

随机推荐

  1. 行业动态 | 每日处理2500万事务数据的IoT解决方案

    借助DataStax Enterprise和其他开源的解决方案,Locstat为它的用户提供了创新的IoT解决方案,并将数据分析时间由2-3周降至数分钟内,从而快速生成用于分析的图数据.不仅如此,现在 ...

  2. Maven史上最全的pom.xml详解

    下面主要是借鉴 官网的资料 收集而来 主要是为了讲解,用到的很少,但是还是需要了解 ,重点是方便查验资料 <project xmlns="http://maven.apache.org ...

  3. tornado&django --- 分页

    tornado 1,urls.py import config import os from views.view import IndexHadnler,SearchHadnler,Searchre ...

  4. PHP函数number_format()

    PHP的number_format() 函数通过千位分组来格式化数字. 语法: number_format(number,decimals,decimalpoint,separator) 注释:该函数 ...

  5. Geoserver 谷歌瓦片地图的使用 多级发布

    下面,我来介绍一下如何在离线的情况下,在Geoserver 中配置出如同谷歌地图般绚丽的效果. 为了让大家有动力看我我接下来写的东西,我先把结果图给大伙儿展现一下: 正如上图所示,该地图是谷歌第四级的 ...

  6. MySQL 存储函数的创建、调用、查找

    MySQL存储函数(自定义函数),函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数 1.创建存储函数:使用 create function关键字 2.调用存储函数: 3.示例: ...

  7. CentOS7的防火墙以及selinux介绍/安装telnet命令/安装netstat与ifconfig命令

    简介:firewall防火墙的使用 防火墙:主要用户信息安全防护,主要有软件防火墙和硬件防火墙.firewalld防火墙是软件防火墙,在centos7 之前默认采用的防火墙是iptables,而在ce ...

  8. CentOS7 实战部署tomcat网站服务器

    简介:实战演练tomcat网站服务器的搭建 Tomcat:是一个开源免费的Web应用服务器,性能稳定,是目前比较流行的Web应用服务器   tomcat官网下载: https://tomcat.apa ...

  9. E-BOOK-TINY6410-LCD的使用

    电子书需要通过屏幕显示出来,首先写了LCD模块.代码上传到了 github https://github.com/qq2216691777/E-book 本次完善了lcd模块的程序.可以适用在其他地方 ...

  10. 吞食鱼2(FeedingFrenzyTwo) 修改器

    吞食鱼2(FeedingFrenzyTwo) 修改器 童年回忆系列.小时候特别喜欢玩这类游戏,软件不大,很慢的网速也不会下载太久,然后对配置要求不高,很破的电脑也可以玩得很开心.不过也有糟心的时候啊, ...