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();
//处理异常
}

参考资料:

ASP.Net MVC过滤器

ASP.Net WebApi异常处理

HttpApplication.Error 事件

时间: 2024-10-22 08:35:55

MVC与WebApi中的异常过滤器的相关文章

关于mvc、webapi中get、post、put、delete的参数

webapi中post提交的数据必须是一个类,get提交的数量无所谓 多种参数get时,参数名不能相同: 在能通过c#的校验的前提下,参数名.参数数量不能全完相同 public string Get(int page, int pagesize) { return "test1"; } public string Get(int page) { return "test2"; } 这是没问题的 public string Get(int page, int page

Autofac - MVC/WebApi中的应用

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp-net-core-overview.html http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaocheng.net/ASPNET-CORE/newproject.html http://www.yuanjiaocheng.net/webapi/web-api-gais

.net Log4Net日志的配置及使用 全局异常过滤器

.net添加Log4Net日志的配置及使用,以及将其设置为全局异常过滤器,主要有以下步骤: 1. 新建一个Web应用程序2. 引用log4net.dll3. 添加config文件4. 在AssemblyInfo.cs进行注册5. 在Global.asax中进行初始化设置6. 添加Log4Helper.cs帮助类7. 新增过滤器LogExceptionFilter.cs文件8. 在FilterConfig.cs中添加过滤器9. 在Global.asax中注册过滤器 详细步骤如下: 1.新建一个we

给Asp.Net MVC及WebApi添加路由优先级

一.为什么需要路由优先级 大家都知道我们在Asp.Net MVC项目或WebApi项目中注册路由是没有优先级的,当项目比较大.或有多个区域.或多个Web项目.或采用插件式框架开发时,我们的路由注册很可能不是写在一个文件中的,而是分散在很多不同项目的文件中,这样一来,路由的优先级的问题就突显出来了. 比如: App_Start/RouteConfig.cs中 routes.MapRoute( name: "Default", url: "{controller}/{action

WebAPI中无法获取Session对象的解决办法

在MVC的WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 public override void Init() { PostAuthenticateRequest += MvcApplication_PostAuthenticateRequest; base.Init(); } void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e) { H

MVC异常过滤器

MVC过滤器 一般的过滤器执行顺序 IAuthorizationFilter->OnAuthorization(授权) IActionFilter          ->OnActionExecuting(行为) Action IActionFilter          ->OnActionExecuted(行为) IResultFilter          ->OnResultExecuting(结果) View IResultFilter          ->OnR

MVC异常过滤器 (错误页)

控制器 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVC过滤器.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index(string id, string nam

Asp.Net WebAPI中Filter过滤器的使用以及执行顺序

转发自:http://www.cnblogs.com/UliiAn/p/5402146.html 在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想,通过Filter能统一地对一些通用逻辑进行处理,如:权限校验.参数加解密.参数校验等方面我们都可以利用这一特性进行统一处理,今天我们来介绍Filter的开发.使用以及讨论他们的执行顺序. Filter

MVC 异常过滤器

本文实现对MVC异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 第一步:写一个自己的异常过滤器,让它继承HandleErrorAttribute类 然后重写OnException()这个方法  (注:HandleErrorAttribute 类已经继承了FilterAttribute, IExceptionFilter这两个接口,并实现了它们,所以这我们只要继承HandleErrorAttribute就可以了) using System; using System.Colle