爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
来源:互联网 发布:znds网络电视论坛官网 编辑:程序博客网 时间:2024/06/11 17:01
回到目录
对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意味着服务器直接500了,前端如何去显示,或者如果你是API的服务,如果为前端返回,如果是500,那直接就挂了,哈哈!
下面是在MVC环境下优化的全局异常捕获代码(非API)
/// <summary> /// 全局异常捕获 /// </summary> public class GlobalExceptionFilterAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext context) { JsonResult response = new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet }; if (context.Exception is ArgumentException) { var exception = (ArgumentException)context.Exception; response.Data = new { statusCode = System.Net.HttpStatusCode.InternalServerError, errorcode = "02", message = exception.Message, }; } else if (context.Exception is Exception) { var exception = (Exception)context.Exception; response.Data = new { statusCode = System.Net.HttpStatusCode.InternalServerError, errorcode = "01", message = exception.Message, }; } else { response.Data = new { statusCode = System.Net.HttpStatusCode.InternalServerError, errorcode = "03", message = "其它异常", }; } context.Result = response; context.ExceptionHandled = true; context.HttpContext.Response.Clear(); context.HttpContext.Response.TrySkipIisCustomErrors = true; } }
如果业务层有问题,直接就throw了
if (id == 0) throw new ArgumentException("id不能为0"); if (id < 0) throw new ArgumentException("id不能是负数");
然后页面后,故意让它抛出异常,我们看一下页面响应的结果
事实上,对于服务器来说,它是200,正常返回的,而对不业务模块来说,它的状态是个500,呵呵,这点要清楚.
感谢各位阅读!
回到目录
阅读全文
0 0
- 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
- 业务层刻意抛出异常,全局异常的捕获它并按格式返回
- 捕获“ORA-00001: 违反唯一约束条件”异常并抛出业务相关的错误信息
- Spring Mvc全局异常捕获
- spring mvc 全局异常捕获
- 页面捕获抛出的异常
- 抛出异常和捕获异常的区别
- 抛出异常和捕获异常的区别
- C++ 抛出并捕获多个异常
- ORACLE 存储过程异常捕获并抛出
- SSH全局异常抛出并输出页面
- Spring-MVC开发之全局异常捕获
- 全局的异常捕获Struts2
- android全局的异常捕获
- 抛出异常和捕获异常
- java 捕获线程里抛出的异常
- java异常的捕获与抛出原则
- Java异常的捕获和抛出
- 作业二十六 Arbitrage
- 困难的串uva129(dfs)
- Java interface中方法和Object方法冲突
- 如何将多个excel文件合并成一个
- 友盟多渠道打包
- 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
- JS的的作用域和闭包
- 第四十六篇:MAC下使用 Node.js 实现一个 WebServer 服务器
- SSL P1520 牛的rp
- MATLAB实现PLA算法
- jQuery选择器(:nth-child(n))详解
- hibernate多表操作详解
- xlistview加载网页内容上拉刷新下拉加载
- Hilditch 细化(实现二)