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();
    //处理异常
    }
     
    参考资料:
     
  • 相关阅读:
    前端构建工具gulpjs的使用介绍及技巧
    mysql /*! 50100 ... */ 条件编译
    linux 硬连接与软连接
    Linux 数据流重定向
    倒排索引
    sed 常用的功能
    linux mysql安装
    mysql help
    linux 命令行选项
    mysql 主主复制的配置流程
  • 原文地址:https://www.cnblogs.com/mstmdev/p/5471099.html
Copyright © 2011-2022 走看看