当前位置:首页 » .NET编程经验 » 正文

.NET Core过滤器之Action过滤器(ActionFilter)

2023年4月22日 17:50:34  分类: .NET编程经验  参与: 人  点这评论

首先需要定义一个Action过滤器类,如命名为:MyActionFilter,继承IActionFilter(同步)或IAsyncActionFilter(异步)接口,这里以IAsyncActionFilter为例,如图:

然后在Program.cs中注册自定义的Action过滤器:

builder.Services.Configure<MvcOptions>(options => {
    //注册自定义的Actioin过滤器
    options.Filters.Add<MyActionFilter>();
});

控制台输出如下:

如果添加多个Action过滤器呢? 效果是什么样的?这里添加了三个Action过滤器

builder.Services.Configure<MvcOptions>(options => {
    //注册自定义的Actioin过滤器
    options.Filters.Add<MyActionFilter>();
    options.Filters.Add<MyActionFilter2>();
    options.Filters.Add<MyActionFilter3>();
});

MyActionFilter2:

public class MyActionFilter2 : IAsyncActionFilter
    {
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            Console.WriteLine("MyActionFilter2 Begin");
            //执行真正要执行的Action
            ActionExecutedContext nextContext = await next();
            //通过Exception判断Action是否执行成功
            if (nextContext.Exception != null)
                Console.WriteLine("Action执行异常!");
            else
                Console.WriteLine("Action执行成功!");
            Console.WriteLine("MyActionFilter2 End");
        }
    }

MyActionFilter3:

public class MyActionFilter3 : IAsyncActionFilter
    {
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            Console.WriteLine("MyActionFilter3 Begin");
            //执行真正要执行的Action
            ActionExecutedContext nextContext = await next();
            //通过Exception判断Action是否执行成功
            if (nextContext.Exception != null)
                Console.WriteLine("Action执行异常!!");
            else
                Console.WriteLine("Action执行成功!!");
            Console.WriteLine("MyActionFilter3 End");
        }
    }

执行效果如下:

有点像俄罗斯套娃


来源:时间去哪儿了博客(微信/QQ号:903918446),转载请保留出处和链接!

本文链接:http://timegowhere.com/post/netcore-action-filter.html

本文标签:.NET Core  Filters    

<< 上一篇下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索

网站分类

Tags列表

最新留言

微信公众号【双语悦读】

    【个人微信】

站点地图 | 网站标签 | 给我留言

Copyright © 2014-2022 timegowhere.com. All rights reserved. 粤ICP备15081222号