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

.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;
        }
        */

    }
}

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

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET 5 引入了新的过滤器和拦截器的概念来帮助我们在应用程序中实现更好的控制和可重用性。虽然它们的目的相似,但它们在实现上有一些差异。 过滤器是一种在应用程序中处理请求和响应的方式。它们可以在整个应用程序生命周期中应用,并且可以应用于控制器、动作和全局级别。过滤器可以用于处理身份验证、授权、异常处理等操作。过滤器可以通过实现特定的接口(例如 IActionFilter,IAuthorizationFilter 等)或继承抽象类(例如 ActionFilterAttribute,AuthorizeAttribute 等)来创建自定义过滤器。它们提供了在请求和响应的不同阶段中执行代码的机制。 拦截器是在方法调用前后进行拦截和处理的一种机制。它们主要用于 AOP(面向切面编程)的实现,并且可以应用于控制器、动作、服务和全局级别。与过滤器不同,拦截器只能用于方法调用。拦截器可以通过实现 IInterceptor 接口或继承抽象类(例如 InterceptorAttribute)来创建自定义拦截器。它们提供了在方法执行前后进行代码注入和处理的能力,并可以修改方法的输入参数和输出结果。 尽管过滤器和拦截器的目的相似,但它们在应用方式和适用范围上有所不同。过滤器更注重于请求和响应的处理,并且可以在全局范围内应用,而拦截器更注重于方法的拦截和处理,并且仅适用于方法调用。具体使用哪种方式取决于应用程序的需求和设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值