zoukankan      html  css  js  c++  java
  • MVC与WebApi中的异常过滤器

    一、MVC的异常过滤器

     
    1、自定义MVC异常过滤器
    创建一个类,继承HandleErrorAttribute即可,如果不需要作为特性使用直接实现IExceptionFilter接口即可,
    注意,该接口在System.Web.Mvc 命名空间下
     
    1. /// <summary>
      /// 自定义的MVC异常过滤器
      /// 可以在Controller或Action上单独使用,也可直接注册为全局过滤器
      /// </summary>
      publicclassMVCExceptionFilterAttribution:HandleErrorAttribute
      {
      publicoverridevoidOnException(ExceptionContext filterContext)
      {
      base.OnException(filterContext);
      //标示当前异常已经被处理
      //如果不手动设置为false,则异常会被Application_Error事件捕获,并可能显示到客户端
      filterContext.ExceptionHandled=true;
      filterContext.Result=newContentResult(){Content="MVC Error"};
      }
      }
     
    2、注册MVC全局过滤器
        直接在Global文件中的Application_Start事件中进行注册    
    1. protectedvoidApplication_Start()
      {
      AreaRegistration.RegisterAllAreas();
      RouteConfig.RegisterRoutes(RouteTable.Routes);
      //注册全局的自定义MVC异常过滤器
      GlobalFilters.Filters.Add(newMVCExceptionFilterAttribution());
      }
     
     
    3、注册Asp.Net异常处理
        除了可以注册MVC的异常处理过滤器外,还可以直接在Global文件中的Application_Error事件中处理Asp.Net中的异常
    1. /// <summary>
      /// 处理Asp.Net中的异常
      /// Controller中未处理的异常会被这里捕获
      /// </summary>
      publicvoidApplication_Error(object sender,EventArgs e)
      {
      var exception =Server.GetLastError();
      //处理异常
      }
     
    MVC中的异常首先会被过滤器捕获,如果异常在过滤中标识为已处理,则不会被Application_Error事件再次捕获,否则Application_Error事件中的代码会被触发。
     
     
     
     
    二、WebApi中异常过滤器
     
    1、自定义WebApi异常过滤器
     
        创建一个类,继承自ExceptionFilterAttribute即可,如果不需要以特性的方式进行使用,则只需要实现IExceptionFilter接口即可,
    注意,该接口在System.Web.Http.Filters命名空间下
     
    /// <summary>
    /// WebApi异常过滤器
    /// 可以在Controller或Action上单独使用,也可直接注册为全局过滤器
    /// </summary>
    publicclassWebApiExceptionFilterAttribution:ExceptionFilterAttribute
    {
    publicoverridevoidOnException(HttpActionExecutedContext actionExecutedContext)
    {
    base.OnException(actionExecutedContext);
    actionExecutedContext.Response=newSystem.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK){ReasonPhrase="api error"};
    }
    }
     
    2、注册全局WebApi过滤器
        同样在Global文件中的Application_Start事件中进行过滤器的注册,
    注意,与MVC不同,此处是在GlobalConfiguration上进行注册
    protectedvoidApplication_Start()
    {
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    //注册MVC中的过滤器 详见MVCExceptionFilter项目示例
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    //注册一个自定义的全局WebApi异常过滤器
    GlobalConfiguration.Configuration.Filters.Add(newWebApiExceptionFilterAttribution());
    }
     
     
    3、注册Asp.Net异常处理
        在WebApi的项目中同样可以注册Asp.Net的异常处理事件,但是此处并不会捕获WebApi中APIController中抛出的异常,只会捕获MVC中
    Controller抛出的异常
    /// <summary>
    /// 处理Asp.Net中的异常
    /// Controller中未处理的异常会被这里捕获
    /// 但ApiController中的异常不会被捕获
    /// </summary>
    publicvoidApplication_Error(object sender,EventArgs e)
    {
    var exception =Server.GetLastError();
    //处理异常
    }
     
    参考资料:
     
  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/mstmdev/p/5471099.html
Copyright © 2011-2022 走看看