.net core webapi 使用过滤器。
过滤器一般用于权限校验、日志处理。。。
一: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; } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步