-
Notifications
You must be signed in to change notification settings - Fork 22
过虑器
Henry edited this page Oct 12, 2019
·
1 revision
很多时候需要在API
的外层添中一些处理,如果验证、错误和逻辑缓存处理等;组件提供过虑器来完成这一功能,过虑器是基于Attribute
实现可以标记在控制器或方法之上。所有逻辑过虑器必须继承EventNext.ActionFilterAttribute
并产现相关方法,具体规则如下:
[AttributeUsage(AttributeTargets.Method|AttributeTargets.Class,AllowMultiple =true)]
public class ActionFilterAttribute : Attribute, IEventActionExecuteHandler
{
public virtual void Executed(EventCenter center, EventActionHandler handler, IEventInput input, IEventOutput output)
{
}
public virtual bool Executing(EventCenter center, EventActionHandler handler, IEventInput input, IEventOutput output)
{
return true;
}
}
-
Executing方法
控制器执行前执行,方法返回一个布尔值,如果为true则继续往下走,否则结束当前请求。
-
Executed方法
控制器执行后执行的过程
public class ProcessFilter:EventNext.ActionFilterAttribute
{
public override bool Executing(EventCenter center, EventActionHandler handler, IEventInput input, IEventOutput output)
{
Console.WriteLine($"{input.EventPath} executing");
return base.Executing(center, handler, input, output);
}
public override void Executed(EventCenter center, EventActionHandler handler, IEventInput input, IEventOutput output)
{
base.Executed(center, handler, input, output);
Console.WriteLine($"{input.EventPath} executed");
}
}
以上定义一个执行过程输出的过虑器,可以把过虑器添加到方法或控制器上。
[ProcessFilter]
[Service(typeof(IUserService))]
public class UserService : IUserService
public class CancelFilter : EventNext.ActionFilterAttribute
{
public override bool Executing(EventCenter center, EventActionHandler handler, IEventInput input, IEventOutput output)
{
output.EventError = EventError.NotFound;
output.Data = new object[] {$"{input.EventPath} not found!" };
return false;
}
}
只要把这个过虑器标记到方法或控制器上,对应的方法则返回一个not found
的错误。