Передача значения из контроллера в фильтр атрибутов настраиваемого действия

У меня есть контроллер, который наследуется от класса BaseController. Этот BaseController имеет защищенное свойство currentUser типа myUser.

Я создал «Атрибут настраиваемого фильтра действий», и мне нужно получить доступ к значению myUser в событии OnActionExecuting() этого атрибута.

Это возможно? Если да, то как я могу реализовать эту функцию?

С уважением.


person user3021830    schedule 07.01.2015    source источник


Ответы (2)


Да, вы можете это сделать, но сначала вы должны преобразовать свойство currentUser из защищенного в общедоступное или предоставить его через свойство или метод только для чтения.

Затем вы можете получить к нему доступ, используя следующие

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

Вы должны переопределить метод OnActionExecuting, в который будет передан объект ActionExecutingContext.

Этот объект имеет свойство Controller, которое является текущим контроллером. Вы можете проверить, является ли это желаемым типом.

So:

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

  var controller = filterContext.Controller as BaseController;
  if (controller != null) {
     currentUser = controller.CurrentUser;
  }
}
person Stephen    schedule 07.01.2015
comment
Требуется небольшое изменение, чтобы изменить метод доступа myUser с защищенного на общедоступный, но он работает хорошо. Спасибо большое. - person user3021830; 07.01.2015
comment
ах, да, я пропустил жирное «защищено» в вашем вопросе .... Может быть, пришло время для очков для чтения - person Stephen; 07.01.2015