【问题标题】:Pasing a value from Controller to Custom Action Atribute Filter将值从控制器传递到自定义操作属性过滤器
【发布时间】:2015-01-07 14:18:01
【问题描述】:

我有一个继承自 BaseController 类的控制器。这个 BaseController 有一个 protected 属性 currentUser,它的类型是 myUser

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

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

问候。

【问题讨论】:

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


    【解决方案1】:

    是的,您可以这样做,但首先您必须将 currentUser 属性从 protected 转换为 public 或通过只读属性或方法公开它。

    然后你可以使用下面的方式访问它

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

    【讨论】:

      【解决方案2】:

      您必须覆盖 OnActionExecuting 方法,该方法将传入一个“ActionExecutingContext”对象。

      那个对象有一个属性Controller,就是当前的控制器。您可以检查它是否属于所需的类型。

      所以:

      public override void OnActionExecuting(ActionExecutingContext filterContext)
      {
        MyUser currentUser = null;
      
        var controller = filterContext.Controller as BaseController;
        if (controller != null) {
           currentUser = controller.CurrentUser;
        }
      }
      

      【讨论】:

      • 只需稍作更改即可将 myUser 的访问者从受保护的访问者更改为公开的,但效果很好。非常感谢。
      • 啊,是的,我错过了你问题中的粗体“受保护”......可能是时候戴上老花镜了
      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 2011-02-05
      • 2013-08-22
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      相关资源
      最近更新 更多