1.简单例子
/// <summary> /// 全局页面控制器异常记录 MVC的异常处理 /// </summary> public class CustomErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //设置为true阻止golbal里面的错误执行 filterContext.ExceptionHandled = true; filterContext.Result = new ViewResult() { ViewName = "/Views/Error.cshtml", ViewData = new ViewDataDictionary<string>("HandleErrorAttribute错误信息") }; } } /// <summary> /// 全局API异常记录 api的异常处理 /// </summary> public class ApiHandleErrorAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext filterContext) { base.OnException(filterContext); filterContext.Response = new HttpResponseMessage() { StatusCode = HttpStatusCode.InternalServerError, Content = new StringContent("ExceptionFilterAttribute测试错误信息") }; } }
2. Global中添加
```C# //注册全局的自定义MVC异常过滤器 GlobalFilters.Filters.Add(new CustomErrorAttribute()); //注册api的异常 GlobalConfiguration.Configuration.Filters.Add(new ApiHandleErrorAttribute());
或者
在FilterConfig中添加
filters.Add(new CustomErrorAttribute());
在WebApiConfig中添加
config.Filters.Add(new ApiHandleErrorAttribute());
异常的处理
以上的异常处理,如果不需要作为特性使用直接实现IExceptionFilter接口即可,引用的时候注意命名空间的区别。
HandleErrorAttribute与ExceptionFilterAttribute的比较
1. HandleErrorAttribute在System.Web.Mvc下,主要用于Controller的异常处理,
ExceptionFilterAttribute在System.Web.Http.Filters下,主要用于api的异常处理
给定的筛选器实例必须实现以下一个或多个筛选器接口
出现这样的错误,主要是ExceptionFilterAttribute用错了,在配置中修改为