ABP文档 - 异常处理
2018-06-22 07:39:38来源:未知 阅读 ()
文档目录
本节内容:
- 简介
- 启用错误处理
- 非AJAX请求
- 显示异常
- UserFriendlyException
- Error 模型
- AJAX 请求
- 异常事件
简介
这个文档针对Asp.net Mvc和Web Api,如果你对Asp.net Core感兴趣,请看Asp.net Core文档。
在一个Web应用里,异常通常在Mvc控制器的Action或Web Api 控制器的Action里被处理,当一个异常姓时,应用的用户会通过某种方式收到错误信息和错误的可能原因。
如果一个错误发生在平常的HTTP请求里,会显示一个页面错误,如果一个错误发生在一个AJAX请求里,服务端把错误发给客户端,客户端负责处理和显示给用户。
在所有Web请求里,处理异常是一件乏味且重复的事情,ABP自动化了这一过程,你几乎不用显式处理任何异常,ABP处理所有异常、日志记录它们并返回对应的格式化的响应给客户端,同时在客户端处理这个响应并显示错误信息给用户。
启用错误处理
要启用ABP控制器的错误处理,customErrors的mode必须启用:
<customErrors mode="On" />
如果你不想在本地计算上处理错误,可以把它设置为“RemoteOnly”。
注意:只需要为Asp.net Mvc控制器设置这个,Web Api 和 Asp.net Core 的控制器不需要设置。
非Ajax请求
如果不是一个AJAX请求,将显示一个错误页面。
显示异常
此处,有一个Mvc控制器的Action抛出一个任意的异常:
public ActionResult Index() { throw new Exception("A sample exception message..."); }
当然,这个异常也会被调用这个Action的另一个方法抛出,ABP处理这个异常、日志记录它并显示“Error.cshtml”视图,你可以自定义这个视图来显示错误,一个错误视图的示例(在ABP模板里默认的Error视图):
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日志记录它但这次不隐藏异常:
所以,如果你想显示一个特殊的错误信息给用户,只要抛出一个UserFriendlyException(或继承于它的一个异常)。
Error 模型
ABP传递一个ErrorViewModel对象作为模型给Error视图:
public class ErrorViewModel { public AbpErrorInfo ErrorInfo { get; set; } public Exception Exception { get; set; } }
ErrorInfo包含能显示给用户的错误细节信息,Exception对象就是抛出的异常,你可以核实它并显示额外的信息,例如,如果它是一个AbpValidationException,你可以显示验证错误信息:
AJAX 请求
如果Mvc的Action返回类型是JsonResult(或异步Action的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对象提供了错误message(信息)和details(明细)。
当你使用ABP基础架构在客户端发送AJAX请求,它自动处理这个JSON对象,并使用message API显示错误信息给用户,更多信息查看AJAX Api。
异常事件
当ABP处理任何异常时,它会触发一个AbpHandledExceptionData事件,它可被注册后并发出通知(查看事件总线文档获取更多信息),例如:
public class MyExceptionHandler : IEventHandler<AbpHandledExceptionData>, ITransientDependency { public void HandleEvent(AbpHandledExceptionData eventData) { //TODO: Check eventData.Exception! } }
如果你把这个示例类加入到你的应用(通常是Web应用),当ABP处理异常时,HandleEvent方法将被调用,所以,你可以在这个方法里深入的检查这个异常。
kid1412附:英文原文:http://www.aspnetboilerplate.com/Pages/Documents/Handling-Exceptions
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 详解ABP框架中Session功能的使用方法 2020-01-18
- 详解ABP框架中的数据过滤器与数据传输对象的使用 2020-01-18
- 解析ABP框架中的日志功能 2019-11-27
- 详解ABP框架的参数有效性验证和权限验证 2019-11-25
- 详解ASP.NET样板项目ABP框架的特性 2019-11-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash