ASP.NET MVC-4种过滤器

MVC Filter

ASP.NET MVC Filter是典型的 AOP(面向切面编程),其中有四种过滤器:ActionResultExceptionAuthorization

我们在编程时,可以把过滤器加在3个地方:
- 控制器上(作用于控制器下所有Action)
- Action上(当前标记的Action)
- 全局(所有控制器的Action)

Action

定义:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Write($"Action执行前");
        base.OnActionExecuting(filterContext);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Write($"Action执行后");
        base.OnActionExecuted(filterContext);
    }
}

使用:

[MyActionFilter]
public ActionResult Index()
{
    return View();
}

Result

定义:

public class MyResultFilterAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Write($"加载视图前执行);
        base.OnResultExecuting(filterContext);
    }
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Write($"加载视图后执行");
        base.OnResultExecuted(filterContext);
    }
}

使用:

[MyResultFilter]
public ActionResult Index()
{
    return View();
}

Exception

定义:

public class MyExceptionAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        // 1.获取异常对象
        Exception ex = filterContext.Exception;
        // 2.记录异常日志
        // 3.重定向友好界面
        filterContext.Result = new RedirectResult("~/error.html");
        // 4.标记一次已经处理完毕
        filterContext.ExceptionHandled = true;

        base.OnException(filterContext);
    }
}

通常在全局中使用,在App_Start/FilterConfig.cs:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new MyExceptionAttribute());
    }
}

Authorization

定义:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        filterContext.HttpContext.Response.Write("OnAuthorization");
        base.OnAuthorization(filterContext);
    }
}

通常在全局中使用,在App_Start/FilterConfig.cs:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new MyAuthorizeAttribute());
    }
}

附:

Github

发布了110 篇原创文章 · 获赞 36 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/zhaobw831/article/details/81218992