ASP.NET Core 移除已注册的过滤器
背景
ABP vNext 默认对异常响应进行了处理,现在某个项目需要自定义异常响应结果。
问题
在 ABP vNext 的 MVC 模块当中,可以看到是通过 AddService(typeof(AbpExceptionFilter)) 添加的过滤器。最初我的想法是在 ConfigureService() 生命周期方法内,使用 Configure<MvcOptions> 移除已经注册的过滤器。
找到对应的 Remove() 方法,发现需要提供一个 IFilterMetadata 对象,顿时懵逼。
解决
通过查阅 AddService() 方法的源码,看到底层是通过 ServiceFilterAttribute 将一个过滤器类型包裹起来。最后将其强转为一个 IFilterMetadata 扔进集合,有强转这一步我们翻阅源码可以看到 ServiceFilterAttribute 应该是实现了这个接口的。
public IFilterMetadata AddService(Type filterType, int order)
{
if (filterType == (Type) null)
throw new ArgumentNullException(nameof (filterType));
ServiceFilterAttribute serviceFilterAttribute = typeof (IFilterMetadata).IsAssignableFrom(filterType) ? new ServiceFilterAttribute(filterType)
{
Order = order
} : throw new ArgumentException(Resources.FormatTypeMustDeriveFromType((object) filterType.FullName, (object) typeof (IFilterMetadata).FullName), nameof (filterType));
this.Add((IFilterMetadata) serviceFilterAttribute);
return (IFilterMetadata) serviceFilterAttribute;
}
那么我们只需要在 Remove() 方法当中传递一个 ServiceFilterAttribute 特性包装过滤器即可。
context.Services.Configure<MvcOptions>(op =>
{
var abpExceptionFilter = new ServiceFilterAttribute(typeof(AbpExceptionFilter));
op.Filters.Remove(abpExceptionFilter);
});
如果需要添加自己的过滤器,只需要调用 AddService(typeof(YourFilter)) 注册。
ASP.NET Core 移除已注册的过滤器的更多相关文章
- Asp.Net Core 轻松学-被低估的过滤器
前言 过滤器,从我们开始开发 Asp.Net 应用程序开始,就一直伴随在我们左右:Asp.Net Core 提供多种类型的过滤器,以满足多种多样的业务应用场景:并且在 Asp.Net Core ...
- 在Asp.Net Core中使用ModelConvention实现全局过滤器隔离
从何说起 这来自于我把项目迁移到Asp.Net Core的过程中碰到一个问题.在一个web程序中同时包含了MVC和WebAPI,现在需要给WebAPI部分单独添加一个接口验证过滤器IActionFil ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...
- 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容
.NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式
C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...
- Asp.Net Core入门之配置文件
ASP.NET Core配置框架已内建支持 JSON.XML 和 INI 配置文件,内存配置(直接通过代码设置值),环境变量配置等方式配置参数. 本文主要和大家讲一下我们在项目中常用的以配置文件的方式 ...
- 学习ASP.NET Core(10)-全局日志与xUnit系统测试
上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...
- ASP.NET Core中间件初始化探究
前言 在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,ASP.NET Core默认也为我们内置了许多的中间件,甚至有时候我们需要自定义中间件来帮我们处理一些请求管道 ...
- 第12章 使用 Entity Framework Core 保存数据(ASP.NET Core in Action, 2nd Edition)
本章包括(请点击这里阅读其他章节) 什么是实体框架核心以及为什么应该使用它 向 ASP.NET Core 应用程序添加实体框架核心 构建数据模型并使用它创建数据库 使用实体框架核心查询.创建和更新数据 ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?
注册的服务器和中间件共同构成了ASP.NET Core用于处理请求的管道, 这样一个管道是在我们启动作为应用宿主的WebHost时构建出来的.要深刻了解这个管道是如何被构建出来的,我们就必须对WebH ...
随机推荐
- 基于.Net Core3.1 MVC + EF Core的项目(一)框架的初步搭建
项目暂时分为六大块,结构如图所示 代码地址是 https://github.com/hudean/VacantCloud- 里面有许多没有完成,不过一些大致的内容都写的差不多了,权限认证依赖注入 ...
- 推荐系统[四]:精排-详解排序算法LTR (Learning to Rank)_ poitwise, pairwise, listwise相关评价指标,超详细知识指南。
0.前言召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回.粗排.精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板: 粗排是初筛,一般不会上复杂模型: 精排是整个推荐环节的重中 ...
- C# 通过VMI接口获取硬件ID
使用C#语言实现通过VMI(虚拟机监控器)接口来获取硬件ID的过程.VMI是一种用于虚拟化环境的接口,用于管理虚拟机和宿主机之间的通信和资源共享.具体实现中,需要通过添加System.Manageme ...
- 从嘉手札<2023-12-15>
荒原 朔方 2023.12.15 人生实属是很愁的时间 愁到听不见一点雪花飘落的声音 愁到连随便写点文章都算得上拼尽全力 萧瑟的北风吹散了为数不多的倔强 漫天的雪花飞舞 埋葬的是那么多年走过的春秋 ...
- 46从零开始用Rust编写nginx,数据还能这么传,多层代理(IP多级代理)搭建
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 负载均衡, 静态文件服务器,websocket代理,四层TCP/UDP转发,内网穿透等,会将实 ...
- centos编译安装tcpdump
环境 CentOS Linux release 7.9.2009 (Core) 准备安装包 libpcap-1.5.3.tar.gz tcpdump-4.9.2.tar.gz 下载地址:https:/ ...
- Leetcode刷题第二天-贪心
655:非递减数列 链接:665. 非递减数列 - 力扣(LeetCode) 直接找最大最小值进行替换不行,[1,5,4,6,7,8,9]最大最小值所处位置可能是非递减数列 如果nums[i]> ...
- webrtc终极版(一)5分钟搭建多人实时会议系统webrtc
webrtc终极版(一),支持https,在线部署[不是本地demo],采用RTCMultiConnection官方demo,5分钟即可搭建成功 @ 目录 webrtc终极版(一),支持https,在 ...
- 基本数据类型(primitive type)
数据类型 数据类型分为基本数据类型(primitive type)和引用数据类型(reference type) 基本数据类型(primitive type) 数值类型 整数类型 浮点类型 字符类型 ...
- 【架构师视角系列】Apollo配置中心之Server端(ConfigSevice)(三)
目录 声明 配置中心系列文章 一.通知机制 二.架构思考 三.源码剖析 1.配置监听 1.1.建立长轮询 1.1.1.逻辑描述 1.1.2.时序图 1.1.3.代码位置 1.1.3.1.Notific ...