ABP源码分析四十七:ABP中的异常处理
2016-05-29 10:44
267 查看
ABP 中异常处理的思路是很清晰的。一共五种类型的异常类。
AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationException异常就可以,无须做额外处理。这类异常往往是需要维护人员介入分析的。
其他四个异常都在AbpController中被集中处理,处理分为两步:一,通过EventBus触发异常事件,相应的异常处理函数则处理异常。二,针对AbpValidationException,UserFriendlyException和AbpAuthorizationException异常,Abp会将异常信息转换为ErrorInfo,并以view或Json的形式返回给客户端。
AbpException: Abp中所有自定义的异常类的基类。
UserFriendlyException:继承自AbpException类, 实现了IHasLogSeverity接口。用户可以通过UserFriendlyException的实例来封装需要返回给客户端的异常。
实际使用UserFriendlyException的样例如下
IExceptionToErrorInfoConverter:定义了将Exception转换为ErrorInfo的方法。同时定义了一个指向自生的对象Next, 作者的用意应该是企图以职责链的模式构建一个ExceptionToErrorInfoConverter实例的链,其中每个实例用于转换一个类型的Exception到ErrorInfo。不过目前而言,ABP中并没有如此实现这个功能,而是将所有的功能都塞到了一个DefaultErrorInfoConverter类中。
DefaultErrorInfoConverter:实现了将AbpValidationException,UserFriendlyException和AbpAuthorizationException实例将Exception转换为ErrorInfo
IErrorInfoBuilder:定义了构建IExceptionToErrorInfoConverter职责链的方法和将Exception转换为ErrorInfo实例的方法。
ErrorInfoBuilder:实现了接口IErrorInfoBuilder中定义的方法。通过构建DefaultErrorInfoConverter实例,并调用该实例完成Exception到ErrorInfo的转换。
AbpController:重写OnException方法来集中处理AbpValidationException,UserFriendlyException和AbpAuthorizationException异常的地方。注意ABP中没有处理AbpInitializationException异常的地方,如果出现了AbpInitializationException的异常,系统会自动终止。
MvcAjaxResponse<TResult>,MvcAjaxResponse:用于封装针对ajax requests的Response信息。继承自AjaxResponse<TResult>,添加了一个TargetUrl属性,没有重写基类中的方法。
AbpJsonResult:继承自Newtonsoft的JsonResult。用于将CLR对象序列化为CamelCase的json 对象。
自定义的异常事件处理函数
返回ABP源码分析系列文章目录
AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationException异常就可以,无须做额外处理。这类异常往往是需要维护人员介入分析的。
其他四个异常都在AbpController中被集中处理,处理分为两步:一,通过EventBus触发异常事件,相应的异常处理函数则处理异常。二,针对AbpValidationException,UserFriendlyException和AbpAuthorizationException异常,Abp会将异常信息转换为ErrorInfo,并以view或Json的形式返回给客户端。
AbpException: Abp中所有自定义的异常类的基类。
UserFriendlyException:继承自AbpException类, 实现了IHasLogSeverity接口。用户可以通过UserFriendlyException的实例来封装需要返回给客户端的异常。
实际使用UserFriendlyException的样例如下
IExceptionToErrorInfoConverter:定义了将Exception转换为ErrorInfo的方法。同时定义了一个指向自生的对象Next, 作者的用意应该是企图以职责链的模式构建一个ExceptionToErrorInfoConverter实例的链,其中每个实例用于转换一个类型的Exception到ErrorInfo。不过目前而言,ABP中并没有如此实现这个功能,而是将所有的功能都塞到了一个DefaultErrorInfoConverter类中。
DefaultErrorInfoConverter:实现了将AbpValidationException,UserFriendlyException和AbpAuthorizationException实例将Exception转换为ErrorInfo
IErrorInfoBuilder:定义了构建IExceptionToErrorInfoConverter职责链的方法和将Exception转换为ErrorInfo实例的方法。
ErrorInfoBuilder:实现了接口IErrorInfoBuilder中定义的方法。通过构建DefaultErrorInfoConverter实例,并调用该实例完成Exception到ErrorInfo的转换。
AbpController:重写OnException方法来集中处理AbpValidationException,UserFriendlyException和AbpAuthorizationException异常的地方。注意ABP中没有处理AbpInitializationException异常的地方,如果出现了AbpInitializationException的异常,系统会自动终止。
MvcAjaxResponse<TResult>,MvcAjaxResponse:用于封装针对ajax requests的Response信息。继承自AjaxResponse<TResult>,添加了一个TargetUrl属性,没有重写基类中的方法。
AbpJsonResult:继承自Newtonsoft的JsonResult。用于将CLR对象序列化为CamelCase的json 对象。
自定义的异常事件处理函数
返回ABP源码分析系列文章目录
相关文章推荐
- 简述javascript事件委托
- UIDynamic介绍
- SVN版本问题:svn: E155021: This client is too old to work with the working copy at
- 你需要了解的javascript事件传播
- CSS
- (Leetcode 99) Recover Binary Search Tree(恢复二叉排序树BST)
- 练习三 1017
- 【Android工程师】自定义控件 - ToggleView(开关状态选择器)
- 用python实现从1加到100的三种方法: for循环,while循环,导入模块法
- DNS
- 第一次使用 IntelliJ IDEA写一个html动作
- 传感器系列之4.2气压传感器
- 数据库视频总结(一)
- 什么是预测区间,置信区间与预测区间二者的异同是什么?
- javaScript 工作必知(六) delete in instanceof
- Ajax使用jQuery与后台交互
- scala笔记之for
- Java并发编程(四)Java内存模型
- 浅谈JavaScript函数重载
- 现实应用实例