过滤器一般用于权限校验、日志处理。。。
一:ActionFilterAttribute过滤器。
1:建一个类,继承于ActionFilterAttribute抽象类。
public class LogFilter : ActionFilterAttribute { /// <summary> /// 控制器中加了该属性的方法中代码执行之前该方法。 /// 所以可以用做权限校验。 /// </summary> /// <param name="context"></param> public override void OnActionExecuting(ActionExecutingContext context) { base.OnActionExecuting(context); string sql = "INSERT INTO dbo.TInfor( Fno, Fname, Fobject, Fscore )VALUES( 'filtertest','过滤器测试','OnActionExecuting','22')"; DBHelper.DBExecute(sql); } /// <summary> /// 控制器中加了该属性的方法执行完成后才会来执行该方法。 /// </summary> /// <param name="context"></param> public override void OnActionExecuted(ActionExecutedContext context) { base.OnActionExecuted(context); string sql = "INSERT INTO dbo.TInfor( Fno, Fname, Fobject, Fscore )VALUES( 'filtertest','过滤器测试','OnActionExecuted','11')"; DBHelper.DBExecute(sql); } /// <summary> /// 控制器中加了该属性的方法执行完成后才会来执行该方法。比OnActionExecuted()方法还晚执行。 /// </summary> /// <param name="context"></param> /// <param name="next"></param> /// <returns></returns> public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { string sql = "INSERT INTO dbo.TInfor( Fno, Fname, Fobject, Fscore )VALUES( 'filtertest','过滤器测试','OnResultExecutionAsync','33')"; DBHelper.DBExecute(sql); return base.OnResultExecutionAsync(context, next); }
2:然后在对应控制器action中添加上该属性就起作用啦(或者在控制器上加或者全局注册)。
二:IExceptionFilter(异常过滤器)。使用同ActionFilterAttribute过滤器。
/// <summary> /// 异常过滤器,记录异常日志。 /// </summary> public class ExceptionFilter : Attribute, IExceptionFilter { /// <summary> ///如果方法中处理了异常,则不会进入该方法。 /// </summary> /// <param name="context"></param> public void OnException(ExceptionContext context) { string sql = "INSERT INTO dbo.TInfor( Fno, Fname, Fobject, Fscore )VALUES( 'filtertest','异常过滤器测试','OnException','22')"; DBHelper.DBExecute(sql); context.ExceptionHandled = true; } }