ABP官方文档翻译 6.1.3 异常处理
处理异常
- 介绍
- 启用错误处理
- Non-Ajax请求
- 显示异常
- UserFriendlyException
- Error模型
- AJAX请求
- 异常事件
介绍
此文档是与ASP.NET MVC和Web API相关的。如果你对ASP.NET Core感兴趣,参见ASP.NET Core文档。
在web应用中,异常通常在MVC Controller actions和Web API Controller actions中处理。当异常发生时,应用程序的用户以某种方式被告知错误的相关信息及原因。
如果错误在正常的HTTP请求时发生,将会显示一个异常页。如果在AJAX请求中发生错误,服务器发送错误信息到客户端,然后客户端处理错误并显示给用户。
在所有的Web请求中处理异常是件乏味且重复的工作。ABP自动化完成异常处理,几乎从不需要显示的处理任何异常。ABP处理所有的异常、记录异常并返回合适、格式化的响应到客户端。在客户端处理这些响应并将错误信息显示给用户。
启用错误处理
要启用ASP.NET MVC控制器的错误处理 ,ASP.NET MVC 引用必须启用customErrors模型。
<customErrors mode="On" />
如果你不想在本地计算机处理错误,可以把它设置为'RemoteOnly'。注意,只有ASP.NET MVC控制器需要这样设置,Web API控制器并不需要。
如果你已经在全局过滤器处理了异常,那么它可能会隐藏异常,ABP的异常处理就可能不会如期望的那样工作。所以,如果需谨慎设置全局异常处理过滤器。
Non-Ajax请求
如果请求不是AJAX的,将会显示一个错误页。
显示异常
这里,有一个MVC控制器的action,它抛出了一个随意的异常:
public ActionResult Index()
{
throw new Exception("A sample exception message...");
}
当然,这个异常可能由另一个方法抛出,而这个方法的调用在这个action里。ABP处理这个异常、记录它并显示'Error.cshtml'视图。你可以自定义这个视图来显示错误。一个示例错误视图(在ABP模板中的默认错误视图):
ABP对用户隐藏了异常的细节并显示了一个标准(本地化的)的错误信息,除非你显示的抛出一个UserFriendlyException。
UserFriendlyException
UserFriendlyException是一个特殊类型的异常,它直接显示给用户。参见下面的示例:
public ActionResult Index()
{
throw new UserFriendlyException("Ooppps! There is a problem!", "You are trying to see a product that is deleted...");
}
ABP记录它但这次不隐藏异常:
所以,如果你想显示一个特定的错误信息给用户,那就抛出一个UserFriedlyException(或者一个继承自这个类的异常)。
Error模型
ABP传递一个ErrorViewModel对象作为Error视图的model:
public class ErrorViewModel
{
public AbpErrorInfo ErrorInfo { get; set; } public Exception Exception { get; set; }
}
ErrorInfo包含可以显示给用户错误的详细信息。Exception对象即为抛出的异常。如果你想的话,可以检查它并显示额外信息。例如,如果它是一个AbpValidationException,我们可以显示校验错误:
AJAX请求
如果MVC action的返回类型时JsonResult(或异步actions为Task<JsonResult>),ABP返回给客户一个基于异常JSON对象。一个错误返回对象的示例:
{
"targetUrl": null,
"result": null,
"success": false,
"error": {
"message": "An internal error occured during your request!",
"details": "..."
},
"unAuthorizedRequest": false
}
success:false表明有错误。error对象提供了错误信息和详情。
当你在客户端使用ABP基础设施来进行AJAX请求,它自动使用message API处理JSON对象并显示错误信息给用户。参见AJAX API了解更多信息。
异常事件
当ABP处理任何异常时,它会触发AbpHandledExceptionData事件,这个事件可以被注册并被通知(参见eventbus文档了解更多关于Event Bus的信息)。示例:
public class MyExceptionHandler : IEventHandler<AbpHandledExceptionData>, ITransientDependency
{
public void HandleEvent(AbpHandledExceptionData eventData)
{
//TODO: Check eventData.Exception!
}
}
如果你把这个示例类放到你的应用中(通常放到Web工程),HandleEvent方法会在所有异常发生时被ABP调用。所以,你可以好好的研究并处理这个异常。
ABP官方文档翻译 6.1.3 异常处理的更多相关文章
- ABP官方文档翻译 10.1 ABP Nuget包
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OD ...
- ABP官方文档翻译 7.1 后台Jobs和Workers
后台Jobs和Workers 介绍 后台Jobs 关于Job持久化 创建后台Job 在队列中添加一个新Job 默认的后台Job管理器 后台Job存储 配置 禁用Job执行 异常处理 Hangfire集 ...
- ABP官方文档翻译 6.2.1 ASP.NET Core集成
ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...
- ABP官方文档翻译 6.1.1 MVC控制器
ASP.NET MVC控制器 介绍 AbpController基类 本地化 其他 过滤器 异常处理和结果包装 审计日志 验证 授权 工作单元 介绍 ABP通过Abp.Web.Mvc nuget包集成到 ...
- ABP官方文档翻译 5.2 动态We API层
动态Web APID层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteS ...
- ABP官方文档翻译 5.1 Web API控制器
ASP.NET Web API控制器 介绍 AbpApiController基类 本地化 其他 过滤器 审计日志 授权 反伪造过滤器 工作单元 结果包装和异常处理 结果缓存 校验 模型绑定器 介绍 A ...
- 动态We API(ABP官方文档翻译)
动态Web API层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteSe ...
- ABP官方文档翻译 1.1 介绍
介绍 介绍 快速示例 其他 启动模板 如何使用 介绍 我们通常会根据不同的需求来创建不同的应用程序.但是对于一些通用相似的结构总是一遍又一遍的实现,至少在某种程度上是这样的.常见的通用模块如授权.验证 ...
- 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
随机推荐
- BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
1432: [ZJOI2009]Function Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1205 Solved: 895[Submit][Sta ...
- Android源码博文集锦3
Android精选源码 android实现最简洁的标签(label/tag)选择/展示控件 懂得智能配色的ImageView,还能给自己设置多彩的阴影哦 NicePhoto-基于 Kotlin ...
- 获取Object对象的length
所有JS程序猿(甚至不止JS)都知道,数组(Array)是有length的,通过length属性,可以很方便的获取数组的长度.可以说,只要使用到了数组,就必会使用到其length属性. 而Object ...
- Django App(三) View+Template
接着上一节(二)的内容,首先启动站点,通过界面添加Question和Choice两张表的数据,因为接下来,要向polls app里面添加views. 1.添加数据如下(这里是通过界面操作添加的数据) ...
- PHP安全之webshell和后门检测
基于PHP的应用面临着各种各样的攻击: XSS:对PHP的Web应用而言,跨站脚本是一个易受攻击的点.攻击者可以利用它盗取用户信息.你可以配置Apache,或是写更安全的PHP代码(验证所有用户输入) ...
- dede列表标签list:应用大全 {dede:list}
http://syizq.blog.163.com/blog/static/435700372011616115826329/ 标签名称: list 功能说明: 表示列表模板里的分页内容列表 适用范围 ...
- Web API <五> 序列化
在 Asp.Net Web Api 中提供了两种 媒体类型格式化器(mime-type formatter),分别用于支持 JSON 和 XML 数据的格式化处理.默认两种格式化器已集成到了 Asp. ...
- different between<A Href> and <jsp: forward>
i want to access Servelt by hyperlink in a jsp web site connection.jsp <%@ page contentType=" ...
- Angular 4 自定义组件封装遇见的一些事儿
你用Angular 吗? 一.介绍 说说封装Angular 组建过程中遇见的一些问题和感悟.用久了Angular,就会遇见很多坑,许多基于Angular开发的框架最喜欢做的事情就是封装组件,然后复用. ...
- Ubuntu16.04安装mongodb
Ubuntu16.04安装mongodb copy from: http://blog.csdn.net/zhushh/article/details/52451441 1.导入软件源的公钥 sudo ...