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

2.ActionFilters
- using Microsoft.AspNetCore.Mvc.Filters;
- using Microsoft.Extensions.Logging;
-
- namespace xx(更改一下命名空间)
- {
- public class ActionFilters:ActionFilterAttribute
- {
- private readonly ILogger<ActionFilters> _logger;
- public ActionFilters(ILogger<ActionFilters> logger)
- {
- _logger = logger;
- }
- /// <summary>
- /// 执行方法之前
- /// </summary>
- /// <param name="context"></param>
- public override void OnActionExecuting(ActionExecutingContext context)
- {
- _logger.LogDebug("执行方法之前");
- base.OnActionExecuting(context);
- }
- /// <summary>
- /// 执行方法之后
- /// </summary>
- /// <param name="context"></param>
- public override void OnActionExecuted(ActionExecutedContext context)
- {
- _logger.LogDebug("执行方法之后");
- base.OnActionExecuted(context);
- }
- /// <summary>
- /// 返回值之前
- /// </summary>
- /// <param name="context"></param>
- public override void OnResultExecuting(ResultExecutingContext context)
- {
- _logger.LogDebug("返回值之前");
- base.OnResultExecuting(context);
- }
- /// <summary>
- /// 返回值之后
- /// </summary>
- /// <param name="context"></param>
- public override void OnResultExecuted(ResultExecutedContext context)
- {
- _logger.LogDebug("返回值之后");
- base.OnResultExecuted(context);
- }
- }
- }
3.ExceptionFilters
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.AspNetCore.Mvc.Filters;
- using Microsoft.AspNetCore.Mvc.ModelBinding;
- using Microsoft.Extensions.Logging;
-
- namespace xx(更改一下命名空间)
- {
- /// <summary>
- /// 异常拦截器
- /// </summary>
- public class ExceptionFilters :ExceptionFilterAttribute
- {
- private readonly ILogger<ExceptionFilters> _logger;
- public IModelMetadataProvider ModelMetadata { get; }
- public ExceptionFilters(ILogger<ExceptionFilters> logger,IModelMetadataProvider modelMetadata)
- {
- _logger = logger;
- ModelMetadata = modelMetadata;
- }
- /// <summary>
- /// 当方法异常时进入
- /// </summary>
- /// <param name="context"></param>
- public override void OnException(ExceptionContext context)
- {
- if (!context.ExceptionHandled)
- {
- //添加到日志
- _logger.LogError(context.Exception.Message);
-
- //返回的数据
- //new{ 自定义 = false,自定义=context.Exception.Message 报错信息}里面的值对应你原本方法返回的数据类型的属性名
- context.Result = new JsonResult(new{ success = false,msg=context.Exception.Message});
-
- //终端式(跑到这里结束)
- }
- base.OnException(context);
- }
- }
- }
4.ResultFilters
- using System;
- using System.Web.Mvc;
-
- namespace xx(更改一下命名空间)
- {
- public class ResultFilters : FilterAttribute, IResultFilter
- {
-
- void IResultFilter.OnResultExecuting(ResultExecutingContext filterContext)
- {
- //执行完action后跳转前执行
- throw new NotImplementedException();
- }
- void IResultFilter.OnResultExecuted(ResultExecutedContext filterContext)
- {
- //执行完action后跳转后执行
- throw new NotImplementedException();
- }
-
- }
-
- }
5.指定方法拦截[TypeFilter(typeof(对应的拦截器类名))](在运行时会自动进入对应方法)

6.指定控制器拦截[TypeFilter(typeof(对应的拦截器类名))]相当于该控制器中所有方法都添加拦截器特性
7.全局控制器中的所有方法添加拦截器(Startup类的ConfigureServices方法体中把拦截器添加到服务之中)

-
- #region 拦截器-全局
- services.AddControllersWithViews(configure =>
- {
- configure.Filters.Add<ActionFilters>();
- });
添加到全局就会每个控制器中方法都能实现拦截器的方法了