过虑器应用
很多时候需要在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; }
访问Beetlex的Github

浙公网安备 33010602011771号