博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
阅读量:7212 次
发布时间:2019-06-29

本文共 2013 字,大约阅读时间需要 6 分钟。

对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意味着服务器直接500了,前端如何去显示,或者如果你是API的服务,如果为前端返回,如果是500,那直接就挂了,哈哈!

下面是在MVC环境下优化的全局异常捕获代码(非API)

///     /// 全局异常捕获    ///     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,呵呵,这点要清楚.

感谢各位阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
微信公众平台消息接口PHP版
查看>>
[Cocos2d-x For WP8]矩形碰撞检测
查看>>
Java Bad version
查看>>
android的listview组件
查看>>
网页 内部转发和网址输入不同
查看>>
matlab中find函数的使用说明
查看>>
这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦!...
查看>>
SGU 403 Game with points
查看>>
2014中国软件开发者调查(一):Java最受欢迎 第二语言JS使用比例最高
查看>>
三级管的原理
查看>>
Java基础—ClassLoader的理解
查看>>
Android App监听软键盘按键的三种方式(转)
查看>>
2、Android应用程序基本特性
查看>>
Android开发之Buidler模式初探结合AlertDialog.Builder解说
查看>>
bash shell命令(2)
查看>>
html中#include file的使用方法
查看>>
eclipse: Program "g++" not found in PATH
查看>>
Python基础(11)--面向对象1
查看>>
银行家算法
查看>>
Spring 的@Scheduled注解实现定时任务运行和调度
查看>>