MVC与WebApi中的异常统一处理

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用错了,在配置中修改为

猜你喜欢

转载自www.cnblogs.com/zhao123/p/9200513.html