過濾器一般用於權限校驗、日志處理。。。
一: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; } }