一直以来我都不知道asp.net mvc actionFilter 实现机制,下面是我模拟写了一个简单的,不知道是不是这样咯.
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public class FunctionAttribute : System.Attribute
{
public virtual void Excuteing() {
}
public virtual void Excuted()
{
}
}
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public class ActionFilterAttribute : FunctionAttribute {
}
public class loginAttribute : ActionFilterAttribute {
public override void Excuted()
{
Console.WriteLine("excuted............");
base.Excuted();
}
public override void Excuteing()
{
Console.WriteLine("excuteing............");
base.Excuteing();
}
}
public class BaseController {
public BaseController()
{
var attr = (FunctionAttribute)TypeDescriptor.GetAttributes(this)[typeof(FunctionAttribute)];
attr.Excuteing();
attr.Excuted();
}
}
[login]
public class Controller : BaseController
{
public void test() {
Console.WriteLine("ddddddddddddd");
}
}
class Program
{
static void Main(string[] args)
{
new attribute.Controller().test();
}
}
输出结果是 excuted........... ,excuteing............,ddddddddddddd