action filter作为一个可以应用到controller action(或者是整个controller)上的属性(Attribute),改变action执行的行为。
Asp.Net MVC提供了以下几种默认的Filter:
Filter Type
实现接口
执行时间
Default Implementation
Authorization filter
IAuthorizationFilter
在所有Filter和Action执行之前执行
AuthorizeAttribute
Action filter
IActionFilter
分别在Action执行之前和之后执行。
ActionFilterAttribute
Result filter
IResultFilter
分别在Action Result执行之后和之前
ResultFilterAttribute
Exception filter
IExceptionFilter
只有在filter,
或者 action method, 或者 action result 抛出一个异常时候执行
HandleErrorAttribute
你同时可以创建自己的action filter,比如说要实现一个自定义的验证系统,那么可能需要创建一个自定义的action filter,或者说当你需要改变controller action返回的view data的时候,也可以通过创建自定义action filter实现。
为了让用户更简单的创建一个自定义action filter,ASP.NET MVC Framework提供了一个基类ActionFilterAttribute,这个类实现了IActionFilter和IResultFilter接口,并且继承了Filter类。
这里的术语并不完全一致,从技术上说,这个类继承ActionFitlerAttribute,并且同时实现了action filter和result filter接口,但是从宽松意义上说,在ASP.NET MVC Framework中,任何实现filter的类型都是action filter。
ActionFilterAttribute类有以下的方法可以重写:
•OnActionExecuting – 在controller action执行之前调用•OnActionExecuted – 在controller action执行之后调用•OnResultExecuting – 在controller action result执行之前调用•OnResultExecuted – 在controller action result执行之后调用
使用“使用Common.Logging 1.2实现Logging(一)”的Logging框架
实现代码
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using MVCQuick.Framework.Logging;namespace MVCQuick.Framework.Mvc{public class HandleErrorLogAttribute : FilterAttribute, IExceptionFilter {public void OnException(ExceptionContext filterContext) { Logger logger = Logger.GetLogger(filterContext.Controller.GetType()); logger.Error(filterContext.Exception); filterContext.Controller.ViewData["Error"] = filterContext.Exception; filterContext.Result = new ViewResult() { ViewName = "Error", ViewData = filterContext.Controller.ViewData, }; filterContext.ExceptionHandled = true; } }}使用方法
在Global.asax.cs类Application_Start()中初始化Logging
Logger.ConfigureLog4Net(HttpContext.Current.Server.MapPath("~/log"), LogLevel.Info, LogLevel.Info);替换HandleErrorAttributeHandleErrorLogAttribute
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorLogAttribute()); }
源代码下载:http://mvcquick.codeplex.com/
转载于:https://www.cnblogs.com/guyoung/archive/2011/10/17/2215347.html
相关资源:JAVA上百实例源码以及开源项目