.Net Core 过滤器详解之 ———— 行为结果过滤器IActionFilter

本文详细介绍了.NET Core中的四种过滤器:Action、Result、Exception和Authorization过滤器,以及它们在处理流程中的作用点。重点讲解了Action过滤器的使用,包括在Action执行前后、结果返回前后的操作,常用于日志记录或特殊处理。通过创建自定义过滤器类并重写相关方法,可以实现特定的功能。示例代码展示了如何实现和应用ActionFilter。
摘要由CSDN通过智能技术生成

.Net Core 过滤器详解

.Net MVC 常用的4种过滤器:

  Action过滤器(IActionFilter):行为过滤器
  Result过滤器(IResultFilter):结果过滤器
  Exception过滤器(IExceptionFilter):异常过滤器
  Authorization过滤器(IAuthorizationFilter): 权限效验过滤器
  Action过滤器:在Action执行之前和执行之后调用。
  Result过滤器:在结果之前和之后调用。
  Exception过滤器:在发生异常时调用。
  Authorization过滤器:身份验证时调用。
摘要:
  An abstract filter that asynchronously surrounds execution of the action and
the action result. Subclasses should override Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecuting(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext),Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecuted(Microsoft.AspNetCore.Mvc.Filters.ActionExecutedContext)orMicrosoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext,Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate) but not Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnActionExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ActionExecutingContext,Microsoft.AspNetCore.Mvc.Filters.ActionExecutionDelegate) and either of the other two. Similarly subclasses should override Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecuting(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext),Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecuted(Microsoft.AspNetCore.Mvc.Filters.ResultExecutedContext) or Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext,Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate) but not Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute.OnResultExecutionAsync(Microsoft.AspNetCore.Mvc.Filters.ResultExecutingContext,Microsoft.AspNetCore.Mvc.Filters.ResultExecutionDelegate) and either of the other two.
过滤器:
  这里主要说一下action过滤器,顾名思义,可以进行action行为前后的一些处理,通常用来记录日志,或者特殊处理。


使用方法:
创建一个过滤器类,继承抽象类ActionFilterAttribute(IActionFilter、IResultFilter这俩货都在抽象类中),异常过滤器接口IExceptionFilter
override重写其虚方法:执行节点如下
OnActionExecuted: 进入action后,返回result前
OnActionExecuting: 进入action前
OnActionExecutionAsync: 进入acion前(异步)
OnResultExecuted: 返回result后
OnResultExecuting: 返回result前
OnResultExecutionAsync: 返回result前(异步)
OnException:抛异常进入


下面上代码,具体实现看代码吧。

using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Threading.Tasks;

namespace Filter
{
    public class ActionFilter: ActionFilterAttribute, IExceptionFilter
    {
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            Console.WriteLine("进入action之后,返回result前");
        }
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            Console.WriteLine("进入action之前");
        }
        public override void OnResultExecuted(ResultExecutedContext context)
        {
            Console.WriteLine("返回result之后");
        }
        public override void OnResultExecuting(ResultExecutingContext context)
        {
            Console.WriteLine("返回result之前");
        }

        public void OnException(ExceptionContext context)
        {
            Console.WriteLine("报错啦!");
            throw new NotImplementedException();
        }
        /*
        public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            Console.WriteLine("进入action之前(异步)");

            return Task.CompletedTask;
        }
        public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            Console.WriteLine("返回result之前(异步)");

            return Task.CompletedTask;
        }
        */

    }
}

最后只需要在需要的地方,标注上该特性就可以直接使用了。
结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值