ASP.NET Core Filter如何支持依赖注入

概述

通过使用 ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码。内置筛选器处理任务,例如:授权(防止用户访问未获授权的资源)。响应缓存(对请求管道进行短路出路,以便返回缓存的响应)。可以创建自定义筛选器,用于处理横切关注点。 横切关注点的示例包括错误处理、缓存、配置、授权和日志记录。 筛选器可以避免复制代码。 例如,错误处理异常筛选器可以合并错误处理。

ASP.NET Core Filter如何支持依赖注入?可以通过全局注册,支持依赖注入。通过TypeFilter(typeof(Filter)) 标记在方法,标记在控制器。通过ServiceType(typeof(Filter))标记在方法,标记在控制器,必须要注册Filter这类;TypeFilter和ServiceType的本质是实现了一个IFilterFactory接口;

代码实现

1、普通Filter使用,继承: Attribute, IActionFilter。

 public class TestActionFilterAttribute : Attribute, IActionFilter{public void OnActionExecuted(ActionExecutedContext context){if (context.HttpContext.Request.Query.TryGetValue("id", out StringValues value)){Console.WriteLine(value.First());}else{context.HttpContext.Response.Redirect("/Error/404");}}public void OnActionExecuting(ActionExecutingContext context){ }}
   [TestActionFilter]public IActionResult Index(){return View();}

2、使用  [TypeFilter(typeof(TestActionFilterAttribute))]注入。

  public class TestActionFilterAttribute : Attribute, IActionFilter{private readonly ILogger _logger;public TestActionFilterAttribute(ILoggerFactory logger){_logger = logger.CreateLogger("TestActionFilterAttribute");}public void OnActionExecuted(ActionExecutedContext context){_logger.LogDebug($"11111");if (context.HttpContext.Request.Query.TryGetValue("id", out StringValues value)){Console.WriteLine(value.First());}else{context.HttpContext.Response.Redirect("/Error/404");}}public void OnActionExecuting(ActionExecutingContext context){ }}
  [TypeFilter(typeof(TestActionFilterAttribute))]public IActionResult Index(){return View();}

3、使用 [ServiceFilter(typeof(TestActionFilterAttribute))]注入。

  [ServiceFilter(typeof(TestActionFilterAttribute))]public IActionResult Index(){return View();}

运行测试,发现报错

于是ConfigureServices加上services.AddSingleton<TestActionFilterAttribute>();

  // This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddSingleton<TestActionFilterAttribute>();services.AddControllersWithViews();}

运行测试,成功。

4、通过全局注册

   public void ConfigureServices(IServiceCollection services){// services.AddSingleton<TestActionFilterAttribute>();services.AddControllersWithViews(options =>{// 添加全局异常options.Filters.Add<TestActionFilterAttribute>();});}

代码地址:

https://gitee.com/conanOpenSource_admin/service-filter_-type-filter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做流向图_各类型供热暖系统图大全,一饱眼福!

↑ 点击上方“暖通风向标”关注我们推广.暖通风向标本文来源&#xff1a;制冷网好书推荐做热泵这几本书你不得不看&#xff01;区域供热系统热电联产系统地热水供暖系统即热式生活热水系统即热式特点:可保证用户随时随地均有热水供应&#xff0c;系统紧凑&#xff0c;无需储罐&…

怎样和程序猿谈一场不散场的爱情

这篇文章就教你如何优&#xff08;xin&#xff09;雅&#xff08;ji&#xff09;的驯服程序猿男友。先分享2个网友的养猿故事。对于程序员&#xff0c;大家想必会有这么一个印象&#xff1a;生活简单乏味&#xff0c;除了编程、吃饭、睡觉&#xff0c;就是上网、打游戏或者一副…

ITU-R BT.656 协议

ITU-R BT.601和ITU-R BT.656国际电信联盟&#xff08;International Telecommunication Union&#xff09;无线通信部门&#xff08;ITU-R&#xff09;制定的标准。严格来说&#xff0c;ITU-R BT.656应该是隶属ITU-R BT.601的一个子协议。ITU-R BT.601是演播室数字电视编码参数…

html下拉菜单的子目录,html - 带有下拉菜单的子菜单的垂直下拉菜单 - 堆栈内存溢出...

我想用以下结构制作一个垂直下拉菜单(对于每个“按钮”一个不同的“下拉” div)。这个想法是当我将“按钮”悬停时&#xff0c;“下拉”以相同的方式出现在“按钮”上大小 (“下拉列表”缩小为高度“ subnav1”相等的“按钮”大小)或显示在“下拉列表”的左侧 (再次具有“ subn…

一年增加1.2w星,Dapr能否引领云原生中间件的未来?

作者 | 敖小剑Dapr 将引领云原生时代应用和中间件的未来。Dapr 是由微软发起的云原生开源新项目&#xff0c;在今年 2 月份刚刚发布了 v1.0 正式版本。虽然推出至今不过一年半时间&#xff0c;但 Dapr 发展势头十分迅猛&#xff0c;目前已经在 GitHub 上收获了 1.2w 星。阿里是…

kylin如何支持flink_日均万亿条数据如何处理?爱奇艺实时计算平台这样做

1.爱奇艺 Flink 服务现状爱奇艺从 2012 年开始开展大数据业务&#xff0c;一开始只有二十几个节点&#xff0c;主要是 MapReduce、Hive 等离线计算任务。到 2014 年左右上线了 Storm、Spark 实时计算服务&#xff0c;并随后发布了基于 Spark 的实时计算平台 Europa。2017 年开始…

VI3的VLAN配置:VST、EST和VGT标记

VMware专家谈及在VMware Infrastructure(VI3)中使用虚拟LAN&#xff08;VLAN&#xff09;时&#xff0c;他们通常是指VLAN Trunk的使用。不过&#xff0c;VI3使用的VLAN配置还有其他三种类型&#xff1a;Virtual Switch Tagging&#xff08;虚拟交换机标记&#xff0c;缩写VST …

没错,纯SQL查询语句可以实现神经网络

我们熟知的SQL是一种数据库查询语句&#xff0c;它方便了开发者在大型数据中执行高效的操作。但本文从另一角度嵌套SQL查询语句而构建了一个简单的三层全连接网络&#xff0c;虽然由于语句的嵌套过深而不能高效计算&#xff0c;但仍然是一个非常有意思的实验。在这篇文章中&…

html5 控制鼠标移动,HTML5 Canvas随鼠标移动的引力粒子群

JavaScript语言&#xff1a;JaveScriptBabelCoffeeScript确定use strict;// Initial Setupvar canvas document.querySelector(canvas);var c canvas.getContext(2d);canvas.width innerWidth;canvas.height innerHeight;// Variablesvar mouse {x: innerWidth / 2,y: inn…

茫茫内存,我该如何用 windbg 找到你 ?

一&#xff1a;背景 1. 讲故事前天wx上有个朋友丢给我一个dump&#xff0c;让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的&#xff0c;现在数据安全很重要&#xff0c;不仅数据库中的信息要加密&#xff0c;灌到内存后数据同样也需密文存储&#xff0c;随用随解密&#…

初中数学知识点总结_初中数学知识点总结大全_经典版_

初中数学必考知识点总结一、基本知识㈠、数与代数A、数与式&#xff1a;1、有理数有理数&#xff1a;①整数→正整数/0/负整数②分数→正分数/负分数数轴&#xff1a;①画一条水平直线&#xff0c;在直线上取一点表示0(原点)&#xff0c;选取某一长度作为单位长度&#xff0c;规…

官方的正则表达式组件 RegularExpressions (4) : 表达式选项

TRegExOption (roNone, //无roIgnoreCase, //不区分大小写roMultiLine, //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾roExplicitCapture, //只捕获指定了名称或编号的子表达式roCompiled, //预编译表达式; 这在反复使用更有效率roSing…

一篇文章,带你了解 “机器学习工程师” 必备技能图谱

5月8日&#xff0c;谷歌召开一年一度的Google I/O大会。在现场演示的演示中&#xff0c;Google Assistant表现得自然流畅&#xff0c;电话那头的理发店员工丝毫没有察觉到自己竟然是在和AI对话&#xff01;阿里的王坚博士曾在一次主题演讲里谈到&#xff1a;「不要担心 AI 毁灭…

俄语使用计算机怎么说,计算机俄语常用词汇

计算机俄语常用词汇аксессуары 附件микрофон 话筒наушники 耳机MIDI клавиатура MIDI键盘MP3 плеер MP3播放器очки 眼镜иктофон 录音机ержатель копий 拷贝存放夹Принтеры 打印机матричный…

一日一技:在Ocelot网关中实现IdentityServer4密码模式(password)

概述IdentityServer4 是为ASP.NET Core 2.系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证框架。将identityserver部署在你的应用中&#xff0c;具备如下的特点可以为你的应用&#xff08;如网站、本地应用、移动端、服务&#xff09;做集中式的登录逻辑和工作流控制…

uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具

阐述如何将一个常用的 bash 脚本融入 npm 生态之中&#xff0c;此处以最近遇到的一个 CR 提交脚本为例。背景作为程序猿&#xff0c;大家或多或少地都用过 GitHub 上的 merge request 功能。当然&#xff0c;除了这类 Code Review 方式&#xff0c;不少公司都有自己的 Code Rev…

Insus Binary Utility

一个将数据流转换为binary(二进制)数据小工具&#xff0c;返回字符串。可以在三层架构中的二层程序处理数据流。 使用时需要引用名称空间using Insus.NET; 类别名称InsusBinaryUtility&#xff0c;需要实例化。 下载地址&#xff1a;http://download.cnblogs.com/insus/library…

圆周率里有每个人的银行卡密码和生日?混知乎的程序员果然都是神一般的存在...

有人好奇&#xff0c;既然圆周率是无限不循环小数&#xff0c;会不会包括这个世界上的任何信息&#xff0c;包含了这个世界&#xff1f;能否包含“任何信息”不好说&#xff0c;但一个冷知识是&#xff0c;圆周率里有每个人的银行卡密码&#xff01;不信&#xff1f;看看这位来…

如何提高Debug效率

大家好&#xff0c;我是Z哥。可以不夸张地说&#xff0c;程序员可能有一半的时间都在修bug。虽说&#xff0c;根据28原则大部分bug都可以在搜索引擎上搜到&#xff08;业务性bug除外&#xff09;&#xff0c;但是往往剩下的那20%bug会花费我们80%的时间。虽然解决这个问题最好的…

中断原理在计算机中的应用,最新 计算机原理与应用 复习3-判断题

最新 计算机原理与应用 复习题目1.INTR、INTA和NMI信号都是与中断有关的信号。( ) √2.8088在访问存储器时&#xff0c;必须用HOLD和HLDA两条信号线指示出总线是否可用。( )3.在8088时序中&#xff0c;在时钟周期T4状态期间&#xff0c;S2S1S0的任何变化指示一个总线周期的开始…