• ASP.NET Core MVC (core 3.1)拦截器


    1.三个类的代码放下面(可复制)

     2.ActionFilters

    1. using Microsoft.AspNetCore.Mvc.Filters;
    2. using Microsoft.Extensions.Logging;
    3. namespace xx(更改一下命名空间)
    4. {
    5. public class ActionFilters:ActionFilterAttribute
    6. {
    7. private readonly ILogger<ActionFilters> _logger;
    8. public ActionFilters(ILogger<ActionFilters> logger)
    9. {
    10. _logger = logger;
    11. }
    12. /// <summary>
    13. /// 执行方法之前
    14. /// </summary>
    15. /// <param name="context"></param>
    16. public override void OnActionExecuting(ActionExecutingContext context)
    17. {
    18. _logger.LogDebug("执行方法之前");
    19. base.OnActionExecuting(context);
    20. }
    21. /// <summary>
    22. /// 执行方法之后
    23. /// </summary>
    24. /// <param name="context"></param>
    25. public override void OnActionExecuted(ActionExecutedContext context)
    26. {
    27. _logger.LogDebug("执行方法之后");
    28. base.OnActionExecuted(context);
    29. }
    30. /// <summary>
    31. /// 返回值之前
    32. /// </summary>
    33. /// <param name="context"></param>
    34. public override void OnResultExecuting(ResultExecutingContext context)
    35. {
    36. _logger.LogDebug("返回值之前");
    37. base.OnResultExecuting(context);
    38. }
    39. /// <summary>
    40. /// 返回值之后
    41. /// </summary>
    42. /// <param name="context"></param>
    43. public override void OnResultExecuted(ResultExecutedContext context)
    44. {
    45. _logger.LogDebug("返回值之后");
    46. base.OnResultExecuted(context);
    47. }
    48. }
    49. }

    3.ExceptionFilters

    1. using Microsoft.AspNetCore.Mvc;
    2. using Microsoft.AspNetCore.Mvc.Filters;
    3. using Microsoft.AspNetCore.Mvc.ModelBinding;
    4. using Microsoft.Extensions.Logging;
    5. namespace xx(更改一下命名空间)
    6. {
    7. /// <summary>
    8. /// 异常拦截器
    9. /// </summary>
    10. public class ExceptionFilters :ExceptionFilterAttribute
    11. {
    12. private readonly ILogger<ExceptionFilters> _logger;
    13. public IModelMetadataProvider ModelMetadata { get; }
    14. public ExceptionFilters(ILogger<ExceptionFilters> logger,IModelMetadataProvider modelMetadata)
    15. {
    16. _logger = logger;
    17. ModelMetadata = modelMetadata;
    18. }
    19. /// <summary>
    20. /// 当方法异常时进入
    21. /// </summary>
    22. /// <param name="context"></param>
    23. public override void OnException(ExceptionContext context)
    24. {
    25. if (!context.ExceptionHandled)
    26. {
    27. //添加到日志
    28. _logger.LogError(context.Exception.Message);
    29. //返回的数据
    30. //new{ 自定义 = false,自定义=context.Exception.Message 报错信息}里面的值对应你原本方法返回的数据类型的属性名
    31. context.Result = new JsonResult(new{ success = false,msg=context.Exception.Message});
    32. //终端式(跑到这里结束)
    33. }
    34. base.OnException(context);
    35. }
    36. }
    37. }

    4.ResultFilters

    1. using System;
    2. using System.Web.Mvc;
    3. namespace xx(更改一下命名空间)
    4. {
    5. public class ResultFilters : FilterAttribute, IResultFilter
    6. {
    7. void IResultFilter.OnResultExecuting(ResultExecutingContext filterContext)
    8. {
    9. //执行完action后跳转前执行
    10. throw new NotImplementedException();
    11. }
    12. void IResultFilter.OnResultExecuted(ResultExecutedContext filterContext)
    13. {
    14. //执行完action后跳转后执行
    15. throw new NotImplementedException();
    16. }
    17. }
    18. }

    5.指定方法拦截[TypeFilter(typeof(对应的拦截器类名))]在运行时会自动进入对应方法

     6.指定控制器拦截[TypeFilter(typeof(对应的拦截器类名))]相当于该控制器中所有方法都添加拦截器特性

     

     7.全局控制器中的所有方法添加拦截器Startup类的ConfigureServices方法体中把拦截器添加到服务之中

     

    1. #region 拦截器-全局
    2. services.AddControllersWithViews(configure =>
    3. {
    4. configure.Filters.Add<ActionFilters>();
    5. });

    添加到全局就会每个控制器中方法都能实现拦截器的方法了

  • 相关阅读:
    centos7安装zabbix 5.0
    DevOps推动科技管理敏捷转型
    linux环境文件或者文件夹打包
    无效的 page.json [“window“] 页面.json配置了“window“: {“disableScroll“: true}
    Reactive判断的API,toRef & toRefs,ref其他的API,customRef
    第五章 树 19 AcWing 1565. 供应链总销售额
    如何使用 Rask AI 进行视频本地化
    【爬虫】基于matlab实现火车票信息爬虫
    【Python深度学习】Python全栈体系(二十七)
    nodejs+vue+elementui个人图书分享共享网站
  • 原文地址:https://blog.csdn.net/weixin_45381269/article/details/126962808