全局异常过滤器

public class ApiExceptionFilter:ExceptionFilterAttribute
{
private IHostingEnvironment _env;
public ApiExceptionFilter(IHostingEnvironment env)
{
_env = env;
} public override void OnException(ExceptionContext context)
{
if (context.ExceptionHandled)
{
return;
} var exMsg = context.Exception.Message;
ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg);
// 开发环境显示异常信息
if(_env.IsDevelopment())
{
resp.Message = exMsg;
}
context.Result = new JsonResult(resp);
context.ExceptionHandled = true;
}
}

在startup添加这个异常过滤器

services.AddMvc(options=>
{
options.MaxModelValidationErrors = ;
// 自定义model验证
options.Filters.Add<VldFilter>();
// 异常捕获
options.Filters.Add<ApiExceptionFilter>();
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

在原来的api中写一个简单的测试方法。响应报文的默认构造函数中的message使用自定义的枚举扩展方法获取枚举的message属性,如果是开发环境,将这个message替换为异常信息,调试会比较方便。

[HttpGet]
public void test()
{
int a = ;
int c = / a;
}

局部异常

当正常请求进来时,有些时候,我们的接口需要一些条件无法满足,这个时候可以手动抛出异常,因为封装了全局响应报文,这样不会影响系统使用。

public class ApiException:Exception
{
public ApiException() { } public ApiException(string message) : base(message) { } public ApiException(string message,Exception ex) : base(message, ex) { } public ApiException(ApiRespCode apiRespCode) : base(ApiEnum.GetMessage(apiRespCode)) { }
}

在需要地方就可以这样抛出异常:

throw new ApiException(ApiRespCode.E999999);

WebApi 全局异常与局部异常的更多相关文章

  1. 异常检测——局部异常因子(Local Outlier Factor ,LOF)算法

    在中等高维数据集上执行异常值检测的另一种有效方法是使用局部异常因子(Local Outlier Factor ,LOF)算法.1.算法思想 LOF通过计算一个数值score来反映一个样本的异常程度.这 ...

  2. Struts局部异常与全局异常处理

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAowAAAG3CAIAAACxBJNyAAAgAElEQVR4nOy9z6tk15Ymdv4B0eRU8O

  3. springmvc处理局部异常和全局异常

    springmvc通过HandlerExceptionResolver(是一个接口,在spring-webmvc依赖下)处理程序异常,包括处理器异常.数据绑定异常以及处理器执行时发生的异常.Handl ...

  4. @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常==》记录

    对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚. 如此一来, ...

  5. 转:@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

    继承 ResponseEntityExceptionHandler 类来实现针对 Rest 接口 的全局异常捕获,并且可以返回自定义格式: 复制代码 1 @Slf4j 2 @ControllerAdv ...

  6. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  7. 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

    1.利用springmvc注解对Controller层异常全局处理 对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service ...

  8. ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面

    应用场景和使用目的 很多时候,我们在访问页面的时候,由于程序异常.系统崩溃会导致出现黄页.在通常的情况下,黄页对于我们来说,帮助是极大的,因为它可以帮助我们知道问题根源,甚至是哪一行代码出现了错误.但 ...

  9. 第25章 SEH结构化异常处理_未处理异常及向量化异常

    25.1 UnhandledExceptionFilter函数详解 25.1.1 BaseProcessStart伪代码(Kernel32内部) void BaseProcessStart(PVOID ...

随机推荐

  1. (32位汇编 五)mov/add/sub/and/or/xor/not

    本文链接:https://blog.csdn.net/pl20140910/article/details/78227133说明符号 说明r 通用寄存器m 代表内存imm 代表立即数r8 代表8位通用 ...

  2. Time类

    public class Demo_Timer { /** * @param args * 计时器 * @throws InterruptedException */ public static vo ...

  3. GoogleNet-ILSVRC-2014冠军

    Going deeper with convolutions-22层 https://my.oschina.net/u/876354/blog/1637819 那么,GoogLeNet是如何进一步提升 ...

  4. 123457123456#0#-----com.threeapp.HeiXIanBuNengPeng01----黑线不能碰

    -com.threeapp.HeiXIanBuNengPeng01----黑线不能碰

  5. python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码

    python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://fi ...

  6. 采购信息记录批导BAPI

    转自:https://www.cnblogs.com/freeandeasy/p/11810272.html作者的话:   可以批导创建及修改信息记录的主数据.而且可以对条件中的时间段及其数量等级中的 ...

  7. LeetCode_118. Pascal's Triangle

    118. Pascal's Triangle Easy Given a non-negative integer numRows, generate the first numRows of Pasc ...

  8. iOS面霸计划(难度)

    一.面试题 1.Xcode项目的目录结构是怎么分组的? 2.简单介绍下在真机上调试开发证书申请流程. 3.按Home键时,怎么保存程序运行状态 4.当程序运行过程中,按下home键以后,ios程序会调 ...

  9. 🔥Scratch少儿编程——飞机大战

    前两天用

  10. oracle数据库数据转储最好方式(数据库表、数据结构和数据一并导出)

    导入:使用plsql:Tools --> Import Tables --> SQL Inserts  得到的为sql文件,在转储的过程中当导入另一个库的时候老是报  “表或视图不存在” ...