Action 过滤器在代码中体现为添加到Action上方的属性,MVC框架包含了一些过滤器,如:
OutputCache –指示Controller在指定时间内缓存返回的结果。
HandleError –处理Contrller中Action抛出的异常
Authorize – 约束特定用户或角色对Action的访问
使用Action 过滤器
Action 过滤器不仅可以控制单个Action,也可以控制整个Contrller。同时,一个Action可以应用多个过滤器。比如:
public class DataController : Controller
{
[OutputCache(Duration=10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}
自定义过滤器
自定义过滤器必须继承System.Web.Mvc.FilterAttribute ,并且实现上述几个接口中的一个或者多个。MVC框架为了方便开发人员,预定义了一个ActionFilterAttribute 类,它已实现了IActionFilter 和IResultFilter 接口。你可以重载 ActionFilterAttribute 类中以下几个方法:
OnActionExecuting – 在Action执行之前调用。
OnActionExecuted – 在Action执行之后调用。
OnResultExecuting – 在Result产生之前调用。
OnResultExecuted – 在Result产生之前调用。
下面示例一个类:
Code
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Log("OnActionExecuting", filterContext.RouteData);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Log("OnActionExecuted", filterContext.RouteData);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Log("OnResultExecuting", filterContext.RouteData);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Log("OnResultExecuted", filterContext.RouteData);
}
private void Log(string methodName, RouteData routeData)
{
var controllerName = routeData.Values["controller"];
var actionName = routeData.Values["action"];
var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
Debug.WriteLine(message, "Action Filter Log");
}
}
NET技术:ASP.NET MVC笔记 之 Action 过滤器,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。