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

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

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
入错误的用户名和密码的情况下会自动显现相应的错误页面。

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="http://images.myeducs.cn/files/uploadimg/20120111/1056421.png" />

四、自定义ActionInvoker:ExceptionActionInvoker

对于上述的两种不同的异常处理方式最终是通过自定义的ActionInvoker来实现的,我们将其命名为ExceptionActionInvoker。如下面的代码片断所式,ExceptionActionInvoker直接继承自ControllerActionInvoker。属性ExceptionPolicy是一个基于指定的异常策略名称创建的ExceptionPolicyImpl 对象,用于针对EntLib进行的异常处理。而属性GetErrorView是一个用于获得作为错误页面的ViewResult对象的委托。整个异常处理的核心定义在InvokeAction方法中,该方法中指定的handleErrorActionName参数代表的是“异常处理操作名称”,整个方法就是按照上述的异常处理策略实现的。

  1. usingSystem;  
  2. usingSystem.Collections.Generic;  
  3. usingSystem.Linq;  
  4. usingSystem.Web;  
  5. usingSystem.Web.Mvc;  
  6. usingArtech.Mvc.ExceptionHandling.Configuration;  
  7. usingMicrosoft.Practices.EnterpriseLibrary.Common.Configuration;  
  8. usingMicrosoft.Practices.EnterpriseLibrary.ExceptionHandling;  
  9. namespaceArtech.Mvc.ExceptionHandling  
  10. {  
  11. publicclassExceptionActionInvoker: ControllerActionInvoker  
  12. {  
  13. protectedExceptionHandlingSettings ExceptionHandlingSettings{get; privateset;}  
  14. protectedvirtualFunc<string, HandleErrorInfo, ViewResult> GetErrorView { get; privateset; }  
  15. publicExceptionPolicyImpl ExceptionPolicy { get; privateset; }  
  16. publicExceptionActionInvoker(stringexceptionPolicy,Func<string, HandleErrorInfo, ViewResult> getErrorView)  
  17. {  
  18. this.ExceptionPolicy = EnterpriseLibraryContainer.Current.GetInstance<ExceptionPolicyImpl>(exceptionPolicy);  
  19. this.GetErrorView = getErrorView;  
  20. this.ExceptionHandlingSettings = ExceptionHandlingSettings.GetSection();  
  21. }  
  22. publicoverrideboolInvokeAction(ControllerContext controllerContext, stringhandleErrorActionName)  
  23. {  
  24. ExceptionContext exceptionContext = controllerContext asExceptionContext;  
  25. if(null== exceptionContext)  
  26. {  
  27. thrownewArgumentException("The controllerContext must be ExceptionContext!""controllerContext");  
  28. }  
  29. try 
  30. {  
  31. exceptionContext.ExceptionHandled = true;  
  32. if(this.ExceptionPolicy.HandleException(exceptionContext.Exception))  
  33. {  
  34. HandleRethrownException(exceptionContext);  
  35. }  
  36. else 
  37. {  
  38. if(ExceptionHandlingContext.Current.Errors.Count == 0)  
  39. {  
  40. ExceptionHandlingContext.Current.Errors.Add(exceptionContext.Exception.Message);  
  41. }  
  42. ControllerDescriptor controllerDescriptor = this.GetControllerDescriptor(exceptionContext);  
  43. ActionDescriptor handleErrorAction = FindAction(exceptionContext, controllerDescriptor, handleErrorActionName);  
  44. if(null!= handleErrorAction)  
  45. {  
  46. IDictionary<stringobject>parameters = GetParameterValues(controllerContext, handleErrorAction);  
  47. exceptionContext.Result = this.InvokeActionMethod(exceptionContext, handleErrorAction, parameters);  
  48. }  
  49. else 
  50. {  
  51. HandleRethrownException(exceptionContext);  
  52. }  
  53. }  
  54. returntrue;  
  55. }  
  56. catch(Exception ex)  
  57. {  
  58. exceptionContext.Exception = ex;60:HandleRethrownException(exceptionContext);  
  59. returntrue;  
  60. }  
  61. }  
  62. protectedvirtualvoidHandleRethrownException(ExceptionContext exceptionContext)  
  63. {  
  64. stringerrorViewName = this.GetErrorViewName(exceptionContext.Exception.GetType());  
  65. stringcontrollerName = (string)exceptionContext.RouteData.GetRequiredString("controller");  
  66. stringaction = (string)exceptionContext.RouteData.GetRequiredString("action");  
  67. HandleErrorInfo handleErrorInfo = newHandleErrorInfo(exceptionContext.Exception, controllerName, action);70:exceptionContext.Result = this.GetErrorView(errorViewName, handleErrorInfo);  
  68. }  
  69. protectedstringGetErrorViewName(Type exceptionType)  
  70. {  
  71. ExceptionErrorViewElement element = ExceptionHandlingSettings.ExceptionErrorViews75:.Cast<ExceptionErrorViewElement>().FirstOrDefault(el=>el.ExceptionType == exceptionType);  
  72. if(null!= element)  
  73. {  
  74. returnelement.ErrorView;  
  75. }  
  76. if(null== element &&null!= exceptionType.BaseType!= null)  
  77. {  
  78. returnGetErrorViewName(exceptionType.BaseType);  
  79. }  
  80. else 
  81. {  
  82. return"Error";  
  83. }  
  84. }  
  85. }  

五、自定义Controller:BaseController

E

网学推荐

免费论文

原创论文

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