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源码分析系列文章目录

ABP源码分析四十七:ABP中的异常处理的更多相关文章

  1. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  2. ABP源码分析四十五:ABP ZERO中的EntityFramework模块

    AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...

  3. ABP源码分析四十六:ABP ZERO中的Ldap模块

    通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...

  4. ABP源码分析二:ABP中配置的注册和初始化

    一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法.执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成 ...

  5. ABP源码分析四:Configuration

    核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...

  6. ABP源码分析二十七:ABP.Entity Framework

    IRepository:接口定义了Repository常见的方法 AbpRepositoryBase:实现了IRepository接口的常见方法 EfRepositoryBase:实现了AbpRepo ...

  7. ABP源码分析三十七:ABP.Web.Api Script Proxy API

    ABP提供Script Proxy WebApi为所有的Dynamic WebApi生成访问这些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理.这些个代理就是j ...

  8. ABP源码分析四十:ZERO的Application和Tenant

    ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...

  9. ABP源码分析四十一:ZERO的Audit,Setting,Background Job

    AuditLog: 继承自Entity<long>的实体类.封装AuditLog的信息. AuditingStore: 实现了IAuditingStore接口,实现了将AuditLog的信 ...

随机推荐

  1. 恢复SQL Server被误删除的数据

    恢复SQL Server被误删除的数据 <恢复SQL Server被误删除的数据(再扩展)> 地址:http://www.cnblogs.com/lyhabc/p/4620764.html ...

  2. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  3. CSS HTML元素布局及Display属性

    本篇文章主要介绍HTML的内联元素.块级元素的分类与布局,以及dispaly属性对布局的影响. 目录 1. HTML 元素分类:介绍内联元素.块级元素的分类. 2. HTML 元素布局:介绍内联元素. ...

  4. TypeScript Vs2013 下提示Can not compile modules unless '--module' flag is provided

    VS在开发TypeScript程序时候,如果import了模块有的时候会有如下提示: 这种情况下,只需要对当前TypeScript项目生成设置为AMD规范即可!

  5. SignalR SelfHost实时消息,集成到web中,实现服务器消息推送

    先前用过两次SignalR,但是中途有段时间没弄了,今天重新弄,发现已经忘得差不多了,做个笔记! 首先创建一个控制台项目Nuget添加引用联机搜索:Microsoft.AspNet.SignalR.S ...

  6. 《你不知道的JavaScript》整理(四)——原型

    一.[[Prototype]] JavaScript中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用. var myObject = { a: 2 }; myObje ...

  7. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  8. 【转】为什么我们都理解错了HTTP中GET与POST的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  9. MementoPattern(备忘录模式)

    /** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...

  10. centos下彻底删除 和重装MYSQL

    1 删除Mysql      yum remove  mysql mysql-server mysql-libs mysql-server;       find / -name mysql 将找到的 ...