惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - ZHK的博客

在IIS Express中配置和启动web site 在File Explorer的当前路径上直接打开VS Code windows 下运行angualr/material2 项目 vs2017中生成.Net Standard Libarary的Nuget Package 使用nginx 的反向代理 给 kibana加上basic的身份认证 Hyper-V 虚拟网络设置 docker for windows & dotnet core app 使用performance monitor 查看 每一个cpu core的cpu time Ubuntu安装Python2.7,nodejs,Redis Ubuntu 16 安装ElasticSearch Ubuntu 16 安装JDK1.8 Ubuntu 14 安装 .Net Core AngularJS2 + ASP.NET MVC项目 Visual Studio Code 调试 nodeJS 固定Table的头部和左边的列-在Knockout Js使用场景下 Jquery UI - DatePicker 在Dialog中无法自动隐藏的解决思路 Visual Studio Code + live-server编辑和浏览HTML网页 基于空项目模板创建使用Owin来host的WebApi项目 ABP源码分析四十六:ABP ZERO中的Ldap模块
ABP源码分析四十七:ABP中的异常处理
ZHK的博客 · 2016-05-29 · via 博客园 - ZHK的博客

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