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是演播室数字电视编码参数…

一年增加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 年开始…

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

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

一日一技:在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…

如何提高Debug效率

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

baidumap vue 判断范围_懂一点前端—Vue快速入门

01. 什么是 VueVue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架&#xff0c;是当下很火的一个 JavaScript MVVM 库&#xff0c;是以 数据驱动和组件化 的思想构建的。MVVM 模式简述下图不仅概括了 MVVM 模式 (Model-View-ViewModel)&#xff0c…

如何在 C#9 中使用顶级程序 (top-level)

当我们用 C# 进行编码的时候&#xff0c;总需要写很多的模板代码&#xff0c;即使是最简单的 console 程序,想象一下&#xff0c;如果去测试一个 类库 或者 API 的功能&#xff0c;通常你会用 Console 程序去实现&#xff0c;在开始工作的时候会发现你受到了 C# 标准模板的限制…

跨部门不配合工作_跨部门协作,队友总是“甩锅”,这三个方法教你快速避坑!...

在日常的工作中&#xff0c;你觉得跨部门沟通的时间占用了多少时间&#xff1f;前阵子我经常会看到有人抱怨&#xff0c;说跨部门沟通的工作实在太难了&#xff0c;同事总是推脱扯皮&#xff0c;领导交代下来的事情&#xff0c;要么说不是自己的职责&#xff0c;要么说以前没做…

模型存储在哪里_最强的模型工作收纳站「Artty Station」登场!

大部分做模型的人&#xff0c;都有同一个梦想——那就是「属于自己的模型空间」。但很少有人&#xff0c;有足够的空间去收纳自己的模型工具。而现在&#xff0c;一款号称史上最强的模型收纳站「Artty Station」横空出世了&#xff0c;现在正在日本网站Makuake上进行众筹&#…

.NET6 中的 PriorityQueue

.NET6 中的 PriorityQueueIntro.NET 6 中引入了一个新的集合类型 PriorityQueue&#xff0c;正如它的名字那样&#xff0c;在普通的 Queue 基础之上增加了优先级的支持&#xff0c;接下来就一起来看一下怎么使用&#xff0c;以及一些常用的使用场景介绍。Get Started来看一个简…

简单而不简陋﹣wp7视觉点滴

一直就很期待&#xff0c;引入了Metro设计理念的wp7的真实操作体验&#xff0c;现在终于如愿了。拿到测试机&#xff0c;首先迅速的过了一遍&#xff0c;第一印象就是界面简单明了&#xff0c;没有华丽的高光、没有跌宕的质感&#xff0c;真的感觉就像在公共场所看到的信息指示…

ros发布节点信息python_vscode开发ROS1(13)-python实现话题通信(msg)

写在最前面1, ros也是可以使用python进行编程的, 而且相比c来说, ros更加简单.使用python创建第一个ROS程序1, 在ros_test目录下, 新建一个scripts文件夹.2, 修改CMakeLists.txt文件, 在find_package中添加rospyfind_package(catkin REQUIRED COMPONENTS roscpp ... #其他的包 …

BeetleX 之 WebApi网关1.5.8发布

这一版本的主要升级了BeetleX的基础网络库&#xff0c;主要解决在某些情况导致解释http协议cpu暴增长的问题&#xff0c;同时使用BeetleX新版本针对的IndexOf的优化&#xff0c;使http协议解释上有着一定程度的性能提升。新版本同样也是支持win64和linux64两个版本&#xff0c;…

egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?

原标题&#xff1a;国威说阀&#xff1a;阀门前面为什么加国标美标日标之类的&#xff1f;美标阀门就是美国标准的意思&#xff0c;通常称呼的美标球阀&#xff0c;美标闸阀和其它什么阀门都是按照美国标准制造出来的阀门其中一类。标准的编制说明是一个非常重要的文件。它阐明…

读《有效需求分析》

最近在一个技术群里看到张逸大佬强力推荐一本关于需求分析的书《有效需求分析》&#xff0c;于是在 Kindle 上下单了&#xff0c;读完后有一种相见恨晚的感觉。本书特点从书中的一些案例可以看出&#xff0c;作者擅长 ToB 软件的需求分析&#xff0c;如果您是从事的 ToB 软件的…

超时锁定计算机,就会发现多了一个控制台锁定显示关闭超时选项

小技巧&#xff1a;锁定屏幕方法多在临时要离开电脑时&#xff0c;可用CtrlAltDel组合键、WinL组合键或在开始菜单中单击用户头像选择“锁定”手动锁屏;或借用“屏幕保护设置”设定自动定时锁屏。1. 探寻自动锁屏时间修改离开电脑一段时间后Windows 10会自动锁屏&#xff0c;但…