Smark.Web支持Filter功能,可以对请求进行拦载处理;开发人员通过定义Filter可以对action的处理进行控制,包括处理提交值,日志和决定是否执行相关action操作等。实现一个Filter非常简单只要继承Smark.Web.FilterAttribute即可,重写OnExecute方法进行功能切入。
public class Test:Smark.Web.FilterAttribute
{
protected override void OnExecute(FilterContext action)
{
MVCContext.Current["TestFilter"] = this.GetType().ToString();
action.Execute();
}
}
红色代码表示是否执行往下继续执行,如果不调用则不会执行。
使用Filter可以在Controller上标记,则应用到所有Controller里的action;也可以单独应用到某个Action上。
[Smark.Web.Controller("/")]
[Filters.Test]
public class Root
{
public class Default : Smark.Web.Action
{
protected override void OnExecute()
{
base.OnExecute();
}
}
}
可以根据实际情况来定义多个Filter,对于Filter的级别是最开始标记的优先处理。
既然有Filter那同样存在SkipFilter, SkipFilter主要是用来描述这个action不被某个Filter处理。
[Smark.Web.Controller("/")]
[Filters.Test]
public class Root
{
[Smark.Web.SkipFilter(typeof(Filters.Test))]
public class Default : Smark.Web.Action
{
protected override void OnExecute()
{
base.OnExecute();
}
}
}