MVC 使用HandleErrorAttribute统一处理异常

    HandleErrorAttribute继承自FilterAttribute,且实现了IExceptionFilter接口。

    属于AOP思想的一种实现,MVC的四大筛选器(权限,动作,结果,异常)中的异常处理。

    Points:

    1)ExceptionHandled为true,表明异常已经处理,不再被拦截;反之,可能被再次拦截;

    2)通过设置ExceptionContext的Result(ActionResult类型)属性,表明结束当前请求

Usage

1.创建自定义异常处理

public class AppHandleErrorAttribute : HandleErrorAttribute

{

    public override void OnException(ExceptionContext filterContext)

    {

        var json = new JsonResponse();

        json.success = false;

        var ex = filterContext.Exception;

        //deal custom exception…

        json.message = "系统异常,请联系管理员!";

        string msg = string.Format("系统异常:{0}", ex.Message);

        LogHelper.Error(msg, ex);   //Log4jNet



        filterContext.ExceptionHandled = true;

        var result = new JsonResult();

        result.Data = json;

        result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

        filterContext.Result = result;



        #region Sample Segment(样例)

        if (filterContext.HttpContext.Request.IsAjaxRequest())

        {

            JsonResult jsonResult = new JsonResult()

            {

                Data = ""

            };



            LogHelper.Error(filterContext.Exception.Message);



            filterContext.Result = jsonResult;

        }

        else

        {

            filterContext.Result = new RedirectResult("Error");

        }



        filterContext.ExceptionHandled = true;

        #endregion

    }

}

2.注册

public class FilterConfig

{

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)

    {

        filters.Add(new AppHandleErrorAttribute());

    }

}

参考:http://www.cnblogs.com/linjiancun/archive/2010/09/16/1827937.html

3.使用

如果要运用AppHandleError拦截异常,则将Controller继承自BaseController即可。

[AppHandleError]

public abstract class BaseController : Controller

{

    //......

}

你可能感兴趣的:(attribute)