我正在尝试创建一个属性,以便我可以装饰一个动作/控制器并运行一些代码。
这是我的属性的代码:
public class UpdateLastLogInAttribute : System.Attribute
{
Linq.UserMinData umd { get; set; }
public UpdateLastLogInAttribute()
{
this.umd =datafuncs.GetMinData();
if (umd != null)
datafuncs.SaveLastConnected(umd);
}
}
...这是我希望属性与
一起使用的控制器[funcs.UpdateLastLogIn]
public class HomeController : Controller
{
}
然而,当我点击控制器时,我的代码永远不会执行。怎么了?
答案 0 :(得分:2)
属性很愚蠢。没有任何魔法可以使属性中的代码运行。您可以反思代码并检测属性并运行代码。
幸运的是,MVC已针对特定属性类型执行此操作,因此......
您可以考虑延长ActionFilterAttribute
并覆盖OnActionExecuting
,OnActionExecuted
,OnResultExecuting
或OnResultExecuted
,具体取决于您要截取的请求的哪个阶段。
MVC查找此属性的子类,并在适当的时间执行上述四种方法。