我有一个继承自BaseController类的控制器。这个BaseController有一个受保护的属性currentUser,它的类型是myUser。
我创建了一个“自定义操作过滤器属性”,我需要在这个属性的OnActionExecuting()事件中访问myUser的值。
这可能吗?如果是这样,我该如何实现这个功能?
问候。
我有一个继承自BaseController类的控制器。这个BaseController有一个受保护的属性currentUser,它的类型是myUser。
我创建了一个“自定义操作过滤器属性”,我需要在这个属性的OnActionExecuting()事件中访问myUser的值。
这可能吗?如果是这样,我该如何实现这个功能?
问候。
您必须覆盖将传入“ActionExecutingContext”对象的 OnActionExecuting 方法。
该对象有一个属性 Controller,即当前控制器。您可以检查它是否属于所需的类型。
所以:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
MyUser currentUser = null;
var controller = filterContext.Controller as BaseController;
if (controller != null) {
currentUser = controller.CurrentUser;
}
}
是的,您可以这样做,但首先您必须将 currentUser 属性从受保护转换为公共或通过只读属性或方法公开它。
然后您可以使用以下方式访问它
var baseController = filterContext.Controller as BaseController;
if (baseController != null) {
//Access your exposed **public** property or method
baseController.currentUser
}