将值从Controller传递到自定义操作属性筛选器

时间:2015-01-07 14:18:02

标签: asp.net-mvc custom-action-filter

我有一个继承自 BaseController 类的控制器。此 BaseController 具有受保护的属性 currentUser ,其类型为 myUser

我创建了一个"自定义操作过滤器属性"我需要在此atrtribute的 OnActionExecuting()事件中访问 myUser 的值。

这可能吗?如果是这样,我该如何实现此功能?

问候。

2 个答案:

答案 0 :(得分:1)

你必须覆盖OnActionExecuting方法,该方法将传入一个'ActionExecutingContext'对象。

该对象具有属性Controller,它是当前控制器。您可以检查它是否属于所需类型。

所以:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
  MyUser currentUser = null;

  var controller = filterContext.Controller as BaseController;
  if (controller != null) {
     currentUser = controller.CurrentUser;
  }
}

答案 1 :(得分:1)

是的,您可以这样做,但首先您已将currentUser属性从受保护的转换为公开,或通过只读属性或方法公开它。

然后您可以使用以下

访问它
var baseController = filterContext.Controller as BaseController;
if (baseController != null) {
    //Access your exposed **public** property or method
    baseController.currentUser 
}