错误捕捉过滤器 .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 ...
随机推荐
- 第 13 章 StringTable详解
目录 第 13 章 StringTable 1.String 的基本特性 1.1.String 概述 1.2.String 的基本特征 1.3.String 的底层结构 2.String 的内存分配 ...
- MySQL高可用(二)主备延时如何解决?
从上篇文章我们知道主备同步是依赖于 binlog,主库负责生产 binlog,备库负责消费 binlog,从而实现主备同步. 今天我们来学习一下主备同步里的一个重点的问题:主备延时. 主备延时,简单来 ...
- tkinter + 爬虫 实现影视在线资源系统
应吾爱朋友现公布代码如下: import tkinter as tk import requests,re,sys,asyncio from tkinter import scrolledtext,E ...
- Quatz JobListener和TriggerListener
myJob:triggerFired... vetoJobExecution class coder.rdf.mybatis.study.JobTest:jobToBeExecuted... test ...
- springboot项目报错Exception getting JDBC Driver: com.mysql.cj.jdbc.Driver
将驱动换成 <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysq ...
- 听说又有兄弟因为用YYYY-MM-dd被锤了...
还记得去年分享过一篇日期格式化使用 YYYY-MM-dd 的潜在问题的文章不? 历史又重演了... 事故现场 我们来写个单元测试,重现一下这个问题. 测试逻辑: 创建两个日期格式化,一个是出问题的YY ...
- MongoDb学习(四)--Repository
在学习这个的时候.关于Repository的映射.在备注xml的时候出现了错误. 错误有点坑.以后写的时候注意一点,在学习的时候.用的mongo的jar包版本比较低. 然而本机操作的时候,用的是最新版 ...
- python图片的读取保存
#coding:utf-8 from PIL import Image import matplotlib.pyplot as plt img=Image.open("F:\\Upan\\源 ...
- 1.简单使用两片74HC595实现动态显示数码管
本篇文章主要是讲解如何简单示用74HC595,更具体的讲解请移步 https://www.cnblogs.com/lulipro/p/5067835.html#undefined 这篇文章讲解的更加详 ...
- python之scrapy篇(二)
一.创建工程 scarpy startproject xxx 二.编写iteam文件 # -*- coding: utf-8 -*- # Define here the models for your ...