【.Net Core】Attribute 特性
前言
Attribute 在 C# 中是一个非常强大的特性,它能够给你的程序集添加元数据信息。
Attribute 实际上是一个对象,它可以与以下元素中的任何一个相关联: 程序集、类、方法、委托、枚举、事件、字段、接口、属性和结构,它会在这些对象上做信息声明,当程序运行之后,你可以通过反射来获取关联到这些对象上的 Attribute 信息,换句话说:你可以通过 Atrribute 向程序集注入一些额外信息,然后在运行时通过反射来获取,attribute 一般由 名字 + 一些可选参数 构成, attribute 名字对应着 atrribute 类。
Filter 的多种注册
- 在 Action 方法上加特性,只对当前 Action 生效
- 在 Controller 控制器上加特性,当前控制器下所有 Action 都生效
- 在程序中全局注册,整个项目都生效
1
2
3builder.Services.AddControllersWithViews(mvcOptions => {
mvcOptions.Filters.Add(AsyncMyLogActionFilterAttribute);
});
匿名支持
单个 Action 注册是对某一个 Action 生效
但是控制器、全局注册都是批量注册,存在“误伤”
系统提供 AllowAnonymousAttribute
,有部分可以使用,有部分不能直接使用
- 扩展 IResourceFilter 不能直接使用,需要扩展支持
- 扩展 IActionFilter 不能直接使用,需要扩展支持
- 扩展 IResultFilter 不能直接使用,需要扩展支持
创建 MyAllowAnonymousAttribute
方法,继承 Attribute
扩展方法中加入如下代码即可
1 | //context.ActionDescriptor.EndpointMetadata中包含当前访问的Action上或Actuion所在控制器上所有的特性 |
.Net Core 6 框架中支持的特性
Post not found: DotNetCore/03.对于AOP多种支持本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 🐾!