你的位置:首页 > 软件开发 > ASP.net > 基于AOP的MVC拦截异常让代码更优美

基于AOP的MVC拦截异常让代码更优美

发布时间:2016-09-22 19:00:22
与asp.net 打交道很多年,如今天微软的优秀框架越来越多,其中微软在基于mvc的思想架构,也推出了自己的一套asp.net mvc 框架,如果你亲身体验过它,会情不自禁的说‘漂亮’。回过头来,‘漂亮&rsqu ...

get='_blank'>asp.net 打交道很多年,如今天微软的优秀框架越来越多,其中微软在基于mvc的思想架构,也推出了自己的一套asp.net mvc 框架,如果你亲身体验过它,会情不自禁的说‘漂亮’。回过头来,‘漂亮’终归有个好的思想,其中类似于AOP的思想,就在其中体现的淋漓尽致,今天本文主要讨论的是基于AOP思想构成的‘异常过滤器’。我们的目的只有一个,让try...catch...无处盾形,让代码更健壮优美。

 

一、理解mvc里filter是怎么运行的

 

老外的一篇文章是这样的草图

基于AOP的MVC拦截异常让代码更优美

通过翻译中文是这样的

基于AOP的MVC拦截异常让代码更优美

其中有一个异常过滤器

基于AOP的MVC拦截异常让代码更优美

通过上述的表格可以清楚的看出,当Controller或Action执行时,IExceptionFiter的实现基类都将有‘能力’处理的,其中微软在mvc中默认实现了一个实现类HandleErrorAttribute

基于AOP的MVC拦截异常让代码更优美

看看这个的源码是怎么能出的

public virtual void OnException(ExceptionContext filterContext)    {      if (filterContext == null)      {        throw new ArgumentNullException("filterContext");      }      if (!filterContext.IsChildAction && (!filterContext.ExceptionHandled && filterContext.HttpContext.IsCustomErrorEnabled))      {        Exception innerException = filterContext.Exception;        if ((new HttpException(null, innerException).GetHttpCode() == 500) && this.ExceptionType.IsInstanceOfType(innerException))        {          string controllerName = (string) filterContext.RouteData.Values["controller"];          string actionName = (string) filterContext.RouteData.Values["action"];          HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);          ViewResult result = new ViewResult {            ViewName = this.View,            MasterName = this.Master,            ViewData = new ViewDataDictionary<HandleErrorInfo>(model),            TempData = filterContext.Controller.TempData          };          filterContext.Result = result;          filterContext.ExceptionHandled = true;          filterContext.HttpContext.Response.Clear();          filterContext.HttpContext.Response.StatusCode = 500;          filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;        }      }    }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:基于AOP的MVC拦截异常让代码更优美

关键词:aop

aop
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。