EntLib的异常处理应用块(Exception Handling Application Block)是一个不错的异常处理框架,它使我们可以采用配置的方式来定义异常处理策略。而ASP.NET MVC是一个极具可扩展开发框架,在这篇文章中我将通过它的扩展实现与EntLib的集成,并提供一个完整的解决异常处理解决方案。[源代码从这里下载]
目录
一、基本异常处理策略
二、通过自定义Action处理异常
三、通过配置的Error View处理异常
四、自定义ActionInvoker:ExceptionActionInvoker
五、自定义Controller:BaseController
我们首先来讨论我们的解决方案具体采用的异常处理策略:
- 对于执行Controller的某个Action方法抛出的异常,我们会按照指定配置策略进行处理。我们可以采取日志记录、异常替换和封装这些常用的异常处理方式;
- 对于处理后的异常,如果异常处理策略规定需要将其抛出,则会自动重定向到与异常类型匹配的出错页面。我们会维护一个异常类型和Error View的匹配关系;
- 对于处理后的异常,如果异常处理策略规定不需要将其抛出,则会执行与当前Action操作相匹配的错误处理Action进行处理。异常处理Action方法默认采用“On{Action}Error”这样的命名规则,而当前上下文会与异常处理操作方法的参数进行绑定。除次之外,我们会设置当前ModelState的错误信息;
- 如果用户不曾定义相应的异常处理Action,依然采用“错误页面重定向”方式进行异常处理。
二、通过自定义Action处理异常
为了让读者对上面介绍的异常处理页面有一个深刻的理解,我们来进行一个实例演示。该实例用于模拟用户登录,我们定义了如下一个只包含用户名和密码两个属性的Model:LoginInfoModel。
namespace Artech.Mvc.ExceptionHandling.Models
2: {
class LoginInfo
4: {
)]
)]
string UserName { get; set; }
8:
)]
10: [DataType(DataType.Password)]
)]
string Password { get; set; }
13: }
14: }