过虑器应用
很多时候需要在API
的外层添中一些处理,如果验证、错误和逻辑缓存处理等;组件提供过虑器来完成这一功能,过虑器是基于Attribute
实现可以标记在控制器或方法之上。所有逻辑过虑器必须继承FilterAttribute
并产现相关方法,具体规则如下:
FilterAttribute
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] public class FilterAttribute : Attribute { public virtual bool Executing(ActionContext context) { return true; } public virtual void Executed(ActionContext context) { } }
Executing方法
控制器执行前执行,方法返回一个布尔值,如果为true则继续往下走,否则结束当前请求。
Executed方法
控制器执行后执行的过程
context参数
- Parameters
当前请求的控制器的参数列表
- Handler
当前控制器方法信息
- Controller
当前方法对应的控制器对象
- Result
获取或设置当前请求的返回值
- Exception
获取或设置控制器处理过程的异常信息,如果存在异常的情况最终组件默认会返回500错误并带上异常信息
定义执行过程Filter
public class GlobalFilter : FilterAttribute { public override bool Executing(ActionContext context) { Console.WriteLine($"{DateTime.Now} {context.HttpContext.Request.Url} globalFilter execting..."); return base.Executing(context); } public override void Executed(ActionContext context) { base.Executed(context); Console.WriteLine($"{DateTime.Now} {context.HttpContext.Request.Url} globalFilter executed"); } }
可以把Filter添加到全局过虑器中
mApiServer.ServerConfig.AddFilter<GlobalFilter>();
添加到全局时需要注意,必须在注册相关控制器前注册,否则无法添加到相关控制器上。
取消过虑器
由于过虑器可以添加到全局或控制器上,这就存在某个方法需要取消过虑器的操作,如常见的就登陆方法不需要验证。组件提供SkipFilter
属性来取消方法中一个或多个过虑器,使用如下:
[SkipFilter(typeof(GlobalFilter))] public string Hello(string name) { return DateTime.Now + " hello " + name; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-09-17 dotnet core高吞吐Http api服务组件FastHttpApi
2014-09-17 azure存储压测的问题(农码主观意识太强被坑了)