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

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

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
xceptionActionInvoker最终在我们自定义的Controller基类BaseController中被调用的。ExceptionActionInvoker对象在构造函数中被初始化,并在重写的OnException方法中被调用。

  1. usingSystem;  
  2. usingSystem.Web.Mvc;  
  3. namespaceArtech.Mvc.ExceptionHandling  
  4. {  
  5. publicabstractclassBaseController : Controller  
  6. {  
  7. publicBaseController(stringexceptionPolicy)  
  8. {  
  9. Func<string, HandleErrorInfo, ViewResult> getErrorView = (viewName, handleErrorInfo) => this.View(viewName, handleErrorInfo);  
  10. this.ExceptionActionInvoker = newExceptionActionInvoker(exceptionPolicy,getErrorView);  
  11. }  
  12. publicBaseController(ExceptionActionInvoker actionInvoker)  
  13. {  
  14. this.ExceptionActionInvoker = actionInvoker;
  15. }
  16. publicvirtualExceptionActionInvoker ExceptionActionInvoker { get; privateset; }  
  17. protectedvirtualstringGetHandleErrorActionName(stringactionName)  
  18. {  
  19. returnstring.Format("On{0}Error", actionName);  
  20. }  
  21. protectedoverridevoidOnException(ExceptionContext filterContext)  
  22. {  
  23. using(ExceptionHandlingContextScope contextScope = newExceptionHandlingContextScope(filterContext))  
  24. {  
  25. stringactionName = RouteData.GetRequiredString("action");  
  26. stringhandleErrorActionName = this.GetHandleErrorActionName(actionName);  
  27. this.ExceptionActionInvoker.InvokeAction(filterContext, handleErrorActionName);  
  28. foreach(var error inExceptionHandlingContext.Current.Errors)  
  29. {  
  30. ModelState.AddModelError(Guid.NewGuid().ToString() ,error.ErrorMessage);  
  31. }  
  32. }  
  33. }  
  34. }  

值得一提的是:整个OnException方法中的操作都在一个ExceptionHandlingContextScope中进行的。顾名思义, 我们通过ExceptionHandlingContextScope为ExceptionHandlingContext创建了一个范围。ExceptionHandlingContext定义如下,我们可以通过它获得当前的ExceptionContext和ModelErrorCollection,而静态属性Current返回当前的ExceptionHandlingContext对象。

  1. publicclassExceptionHandlingContext  
  2. {  
  3. [ThreadStatic]  
  4. privatestaticExceptionHandlingContext current;  
  5. publicExceptionContext ExceptionContext { get; privateset; }  
  6. publicModelErrorCollection Errors { get; privateset; }  
  7. publicExceptionHandlingContext(ExceptionContext exceptionContext)  
  8. {  
  9. this.ExceptionContext = exceptionContext;
  10. this.Errors = newModelErrorCollection();  
  11. }  
  12. publicstaticExceptionHandlingContext Current  
  13. {  
  14. get { returncurrent; }  
  15. set { current = value;}  
  16. }  

在BaseController的OnException方法中,当执行了ExceptionActionInvoker的InvokeAction之后,我们会将当前ExceptionHandlingContext的ModelError转移到当前的ModelState中。这就是为什么我们会通过ValidationSummary显示错误信息的原

网学推荐

免费论文

原创论文

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