.Net Core WebApi 系列:过滤器Filter

这篇具有很好参考价值的文章主要介绍了.Net Core WebApi 系列:过滤器Filter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

过滤器有什么作用,在什么场景下适合用到它?

假设一个项目进展到快结束的时候,项目leader为了保证程序的稳定性和可监控和维护性要求将所有的方法加上日志,如果项目比较庞大,方法非常多,那岂不是得费很大得劲来完成这样一件事情。不过不用担心,咋们遇到的问题,伟大的语言设计者早已帮我们想好了解决办法过滤器,过滤器是一种AOP(面向切面编程)技术的体现,AOP具有松耦合,易扩展,代码可复用的特点。

通常我们在这些场景下如身份验证、日志记录、异常获取等会使用到过滤器

.NET Core中的过滤器生命周期:

 

.Net Core WebApi 系列:过滤器Filter

 

.NET Core中的过滤器有多种,先介绍ActionFilterAttribute的用法

(1)自定义一个Filter类:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace Test.WebApi.Filter
{
    public class ClientIpCheckActionFilter : ActionFilterAttribute
    {
       
        private readonly string _safelist;

        public ClientIpCheckActionFilter(string safelist)
        {
            _safelist = safelist;           
        }

        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var remoteIp = context.HttpContext.Connection.RemoteIpAddress;
            LogHelper.Debug("Remote IpAddress: {"+ remoteIp + "}");
            var ip = _safelist.Split(';');
            var badIp = true;

            if (remoteIp.IsIPv4MappedToIPv6)
            {
                remoteIp = remoteIp.MapToIPv4();
            }

            foreach (var address in ip)
            {
                var testIp = IPAddress.Parse(address);

                if (testIp.Equals(remoteIp))
                {
                    badIp = false;
                    break;
                }
            }

            if (badIp)
            {
                LogHelper.Debug("Forbidden Request from IP: {"+ remoteIp + "}");
                context.Result = new StatusCodeResult(StatusCodes.Status403Forbidden);
                return;
            }

            base.OnActionExecuting(context);
        }


    }
}

 (2)注册过滤器,注册过滤器有两种方式,一种是全局注册,另一种是局部注册:

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            // If using Kestrel:
            //services.Configure<KestrelServerOptions>(options =>
            //{
            //    options.AllowSynchronousIO = true;
            //});

            // If using IIS:
            services.Configure<IISServerOptions>(options =>
            {
                options.AllowSynchronousIO = true;
            });
            // 全局注册 在ConfigureServices 添加
            services.AddMvc(option => { option.Filters.Add(typeof(ClientIpCheckActionFilter)); });         
            
           
        }

局部注册,局部注册可以体现在类或方法上:

//[Route("api/[controller]")]
    //[ApiController]
    [ClientIpCheckFilter]
    public class ContractController : ControllerBase
    {
        public IConfiguration Configuration { get; }
        public ContractController(IConfiguration _configuration)
        {
            Configuration = _configuration;
        }

        // GET: api/<SendContractController>
        [HttpGet]
        [ClientIpCheckFilter]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    }

参考:

.NET Core中过滤器Filter的使用介绍 - 星火卓越 - 博客园过滤器有什么作用,在什么场景下适合用到它? 假设一个项目进展到快结束的时候,项目leader为了保证程序的稳定性和可监控和维护性要求将所有的方法加上日志,如果项目比较庞大,方法非常多,那岂不是得费很大https://www.cnblogs.com/amylis_chen/p/12318081.html文章来源地址https://www.toymoban.com/news/detail-449502.html

到了这里,关于.Net Core WebApi 系列:过滤器Filter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis系列16:聊聊布隆过滤器(原理篇)

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型 追求性能极致:客户端缓存带来的革命 Redis系列8:Bitmap实现

    2024年02月08日
    浏览(43)
  • [Ansible系列]ansible JinJia2过滤器

    目录 一.  JinJia2简介 二.  JinJia2模板使用  2.1  在play中使用jinjia2 2.2  template模块使用 2.3   jinjia2条件语句 2.4  jinjia2循环语句 2.5   jinjia2过滤器 2.5.1   default过滤器 2.5.2  字符串操作相关过滤器   2.5.3  数字操作相关过滤器 2.5.4  列表操作相关过滤器  2.5.5   应用于文件

    2024年02月02日
    浏览(48)
  • 【算法系列 | 7】深入解析查找算法之—布隆过滤器

    心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第3讲,讲一下排序算法的选择排序(Selection Sort) 查找算法是很常见的

    2024年02月14日
    浏览(43)
  • 【Spring Boot系列】-Spring Boot过滤器Filter

    **Filter(过滤器) 可以理解为经过一层次的过滤处理才达到使用的要求,而其实 Filter(过滤器) 就是服务器与客户端请求与响应的中间层组件,在实际项目开发中 Filter(过滤器)**主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。 **Filter(过滤器

    2024年02月13日
    浏览(51)
  • 【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现

    上文说到,Spring Security它是一个强大的和高度可定制的身份验证和访问控制框架。它提供了一套丰富的功能,用于保护基于Spring的应用程序。 上文又说到,在Spring Security中,过滤器(Filter)是一个重要的组件,用于处理身份验证、授权和其他安全相关的任务。 Spring Security 的

    2024年04月22日
    浏览(42)
  • jQuery选择器(二)(基本过滤器,内容过滤器,可见过滤器)

    写在前面 jQuery是一个快速、简洁的 JavaScript 框架,是继Prototype之后又一个优秀的 JavaScript 代码库。jQuery的设计宗旨是“WriteLess,DoMore”,即倡导写更少的代码,做 更多的事情。jQuery封装了 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化HTML文档操作、事件

    2024年02月02日
    浏览(54)
  • Gateway自定义过滤器——全局过滤器

    首先,我们要知道全局过滤器其实是特殊路由过滤器(特殊的GatewayFilter),会有条件地作用于所有路由。 为什么要自定义全局过滤器?就好比是看大门的保安大叔,平时主要是做好进出大门外来人员登记即可,但是因为新冠疫情,现在还需要给外来人员测量体温等等。而已有的

    2024年02月16日
    浏览(47)
  • 异常过滤器—MVC中异常过滤器使用

    异常过滤器( Exception Filters )是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事

    2024年02月13日
    浏览(60)
  • Javaweb | 过滤器、配置、过滤器链、优先级

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术 用户的请求和响应都需要经过过滤器 过滤器作用 执行地位在Servlet之前,客户端发送请求是,会先经过Filter,再到达目标Servlet中;响应时,会根

    2023年04月17日
    浏览(54)
  • 操作过滤器—MVC中使用操作过滤器实现JWT权限认证

    上一篇文章分享了授权过滤器实现JWT进行鉴权,文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,接下来将用操作过滤器实现昨天的JWT鉴权。 ​ 与授权过滤器大部分一样,只是执行的时机和继承的接口有所不同。操作过滤器是在Action执行的前和后进行调用执行

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包