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();
    //处理异常
    }
     
    参考资料:
     
  • 相关阅读:
    【原创】简单快速软件开发平台,C/S架构二次开发平台
    【原创】进销存快速开发框架 (Winform三层架构+DevExpress+MsSQL)
    MES软件开发工具
    Winform C/S架构TMS物流运输管理系统司机车辆GPS+手机APP定位参考设计
    C#权限管理框架介绍|C/S系统快速开发框架权限系统设计
    C# Winform程序调用WebApi接口实现增删改查(CRUD)实例源码教程
    ASP.NETWebApi实例教程:如何部署和发布WebApi到IIS服务器详解
    Web后端开发框架|WebApi后端主流开发框架介绍
    Asp.Net开源服务端框架,WebApi后端框架(C#.NET)
    Winform布局开源框架,Winform控件框架,插件化框架
  • 原文地址:https://www.cnblogs.com/mstmdev/p/5471099.html
Copyright © 2011-2022 走看看