网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

ASP.NET MVC基于异常处理的解决方案

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05

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。

  1. namespaceArtech.Mvc.ExceptionHandling.Models  
  2. {  
  3. publicclassLoginInfo  
  4. {  
  5. [Display(Name ="User Name")]  
  6. [Required(ErrorMessage = "User Name is manadatory!")]  
  7. publicstringUserName { getset; }  
  8. [Display(Name = "Password")]  
  9. [DataType(DataType.Password)]  
  10. [Required(ErrorMessage = "Password is manadatory!")]  
  11. publicstringPassword { getset; }  
  12. }  

我们定义了如下一个AccountController,它是我们自定义的BaseController的子类。AccountController在构造的时候调用基类构造函数指定的参数代表异常处理策略的配置名称。SignIn方法代表用于进行“登录”的操作,而OnSignInError就表示该操作对应的异常处理操作。如果在SignIn操作中抛出的异常经过处理后无需再抛出,则会通过调用OnSignInError,而此时ModelState已经被设置了相应的错误消息。

  1. publicclassAccountController : BaseController  
  2. {  
  3. publicAccountController()  
  4.  base("myPolicy")5:{ }  
  5. publicActionResult SignIn()  
  6. {  
  7. returnView(newLoginInfo());  
  8. }  
  9. [HttpPost]  
  10. publicActionResult SignIn(LoginInfo loginInfo)  
  11. {  
  12. if(!ModelState.IsValid)  
  13. {  
  14. returnthis.View(newLoginInfo { UserName = loginInfo.UserName });  
  15. }  
  16. if(loginInfo.UserName != "Foo")  
  17. {  
  18. thrownewInvalidUserNameException();  
  19. }  
  20. if(loginInfo.Password != "password")  
  21. {  
  22. thrownewUserNamePasswordNotMatchException();  
  23. }  
  24. ViewBag.Message = "Authentication Succeeds!";  
  25. returnthis.View(newLoginInfo { UserName = loginInfo.UserName });  
  26. }  
  27. publicActionResult OnSignInError(stringuserName)  
  28. {  
  29. returnthis.View(newLoginInfo { UserName = userName });  
  30. }  

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号