【转】ABP源码分析四十七:ABP中的异常处理

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游长江有感

游长江有感——代腾飞 2007年4月14日 于重庆独自乘舟游两江清风相伴影相随依船瞭望朝天门一艘巨轮泊江中两岸景色迷人离忽闻歌声伴耳中碧波荡漾三千里愁情烦事淡风中 转载于:https://www.cnblogs.com/daitengfei/archive/2007/04/27/729171.html

服务器维护 测试化验加工费,测试化验加工费.PPT

测试化验加工费.PPT四川师范大学科研处 预算填报的重要性 一、编报方法 二、各科目支出详解 三、课题预算编报中的常见问题 以省科技厅项目申报预算要求为例。其他类型科研项目根据相应管理办法&#xff0c;参照执行 主要内容 四、特殊情况及具体建议 编报方法——基本原则 目标…

当你累了,准备放弃时,看看这个吧!!!

在别的空间看到这篇文章&#xff0c;感觉说的很有道理&#xff0c;故转过来&#xff0c;送给所有还在坚持的朋友~~ 每个人都背负着一个沉重的十字架&#xff0c;在缓慢而艰难地朝着目的地前进。 途中&#xff0c;有一个人忽然停了下来。 他心想&#xff1a;这个十字架实在是…

mixin模式 python_Python中的mixin模式

转载注明&#xff0c;本文链接&#xff1a;http://www.bianbingdang.com/article_detail/167.html# MixIn和继承的关系面向对象三大特征&#xff0c;继承、封装、多态。第一次看到MixIn的时候&#xff0c;弄不懂这个和继承有什么关系/区别。首先&#xff0c;继承是父亲和儿子的…

梦游4k

本来还打算晚上看案例分析的&#xff0c; 觉得是在太困了就上床眯会儿&#xff0c; 一睁眼&#xff0c;呀&#xff0c;怎么就快九点了呢。 可怜我一晚上的宝贵时间就这么被我浪费过去了。 从床上蠕动到椅子上&#xff0c;努力扒开眼睛看看BBS&#xff0c; 还是跑步好啊。 跑步好…

ajax里绑定框,Select级联菜单,用Ajax获取Json绑定下拉框(jQuery)

需求类似这样 ↓ ↓ ↓--》 菜单A发生变化&#xff0c;动态取数据填充下拉菜单B。JS代码如下&#xff1a;$(function () {$("#TeamSelect").change(function () {var tid $("#TeamSelect option:selected").val();$.ajax({url: "/ajax/ajaxGetMa…

【转】CANOPEN总线的相关问题点整理分享*****

CANopen 是一个基于 CAN&#xff08;控制局域网&#xff09;串行总线系统和 CAL&#xff08;CAN 应用层&#xff09;的高层协议。CANopen 通讯协议 CiA DS-301 包括周期和事件驱动型通讯&#xff0c;不仅能够将总线负载减少到最低限度&#xff0c;而且还能确保极短的反应时间。…

WinCE系统字体的设置

作者&#xff1a;ARM-WinCE 确实很久没有写Blog了&#xff0c;感觉有些对不住曾经看我blog的朋友。刚从美国回来&#xff0c;由于项目原因&#xff0c;春节都在美国工作&#xff0c;现在有点时间&#xff0c;先写一篇简单的&#xff0c;介绍一下WinCE字体的设置。 WinCE系统字体…

js脚本点击按钮显示文字_JSBOX脚本聊天神器

聊天神器是一个基于JSBox的脚本JSBox 是一个可以用来运行 JavaScript 脚本的 iOS 应用&#xff0c;你可以通过他来执行标准的 JavaScript 脚本 这种执行不是指跑在浏览器上&#xff0c;而是执行在一个完全原生的环境&#xff0c;效率很高。并且我们提供了很多 iOS 原生的接口&a…

轻松实现无刷新三级联动菜单[VS2005与AjaxPro]

最近做一些网站程序&#xff0c;经常要用到多个下拉菜单选择&#xff0c;看了介绍开始用AjaxPro这个控件&#xff0c;感觉效果不错。以前使用过MagicAjax&#xff0c;很久不用了忘记了&#xff0c;最麻烦的就是在虚拟目录的时候比较麻烦&#xff0c;呵呵&#xff0c;在网上也有…

【转】为什么博士叫PhD?

作者&#xff1a;李青影 链接&#xff1a;https://www.zhihu.com/question/20950602/answer/1028008012 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 在填学历的时候遇到过这个问题&#xff0c;明明毕业证书上写…

dnf服务器合并信息,卤蛋带你看韩服!全体服务器合并改版信息互通

‍各位好久不见啊&#xff01;我是卤蛋 本期为各位介绍韩服合区后的全部改动~在韩服合并服务器之前 一共有八个服务器&#xff1a;但是在合区之后大区依然存在&#xff0c;不过服务器是互通的在哪个大区创建角色基本上没什么区别 这样做避免了角色混乱的问题如何切换频道呢&…

在WinCE5.0和WinCE6.0下,编译选项介绍

作者&#xff1a;ARM-WinCE 在WinCE5.0中&#xff0c;在"Build OS”菜单中&#xff0c;我们会看到不同的编译选项&#xff1a; "Sysgen"&#xff0c;"Build and Sysgen"和"Build and Sysgen current BSP" Sysgen&#xff1a;不用多说&#…

java 无法执行export 命令_模块中的export、import以及复合模式的使用方法

export&#xff1a;规定模块对外接口①默认导出&#xff1a;export default Test(导入时可指定模块任意名称&#xff0c;无需知晓内部真实名称)②单独导出&#xff1a;export const name "Bruce"③按需导出&#xff1a;export { age, name, sex }(推荐)④改名导出&a…

轉:愚公移山

--《列子汤问篇》 太行、王屋二山&#xff0c;方七百里&#xff0c;高万仞。本在冀州之南&#xff0c;河阳之北。北山愚公者&#xff0c;年且九十&#xff0c;面山而居。惩山北之塞&#xff0c;出入之迂也&#xff0c;聚室而谋曰&#xff1a;“吾与汝毕力平险&#xff0…

【转】在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的基于cookie的身份验证&#xff0c;基于cookie的身份验证在B/S架构中使用比较多&#xff0c;但是在Web Api中因其特殊性&#xff0c;基于cookie的身份验证已经不适合了&#xff0c;因为并不是每一个调用api的客户端都…

深入理解.bin文件和.nb0文件的结构

.bin文件是一个描述性质的映像文件&#xff0c;它由文件头(head)、镜像数据目的起始地址(ImageStart)、镜像数据长度(ImageLength)和多条相对独立的记录&#xff08;record&#xff09;构成。 文件头(head)由7个字节组成&#xff0c;内容是&#xff1a;42 30 30 30 46 46 0A,即…

ajax中怎么验证data,我应该在jQuery的ajax成功处理程序中验证响应数据吗?

假设我有一个后AJAX调用&#xff0c;我想将返回的数据放入一些HTML元素中。$.post(settings.url, function(data) {$(#someElement).text(data.someData1);$(#someElement2).text(data.someData2);});我是一名后端开发人员&#xff0c;我必须对来自用户的任何数据进行服务器端验…

number 限制最长数字_Java源码阅读-Number

抽象类Number是BigDecimal, BigInteger,Byte,Double,Float,Integer, Long, Short类的父类&#xff0c;实现了java.io.Serializable接口&#xff0c;这个接口以后再说。其中的抽象方法主要是基本数据类型的转换&#xff0c;这些方法都可能涉及到四舍五入和截断Integer类实现了父…

(JavaScript)实现在客户端动态改变Treeview节点的选中状态

Asp.net 2.0 中的 Treeview 非常好用&#xff0c;而且轻便。但在使用过程中&#xff0c;往往会发现一些不够人性化的地方。例如您要设计一棵树&#xff0c;里面放置了一些收藏的网址。在这棵树中&#xff0c;节点的 SelectAction 只有 Expand 和 NavigateUrl 状态&#xff0c;也…