Как передать переменные в пользовательский ActionFilter в приложении ASP.NET MVC

У меня есть контроллер в моем приложении MVC, для которого я пытаюсь записать данные с помощью специального ActionFilterAttribute, используя метод onResultExecuted.

Я прочитал этот учебник, чтобы понять и написать свой собственный фильтр действий. Вопрос в том, как передать переменные из контроллера в фильтр действий?

  • Я хочу получить входные переменные, с которыми вызывается контроллер. Скажем, имя пользователя/пользователя.
  • Если (в некоторых ситуациях) исключение выбрасывается любым методом контроллера, я тоже хочу зарегистрировать ошибку.

Контроллер -

[MyActionFilter]
public class myController : ApiController {
    public string Get(string x, int y) { .. }
    public string somemethod { .. }
}

Фильтр действий -

public class MyActionFilterAttribute : ActionFilterAttribute {
    public override void onActionExecuted(HttpActionExecutedContext actionExecutedContext) {
        // HOW DO I ACCESS THE VARIABLES OF THE CONTROLLER HERE
        // I NEED TO LOG THE EXCEPTIONS AND THE PARAMETERS PASSED TO THE CONTROLLER METHOD
    }
}

Надеюсь, я объяснил эту проблему здесь. Извиняюсь, если я пропускаю некоторые базовые объекты здесь, я совершенно новичок в этом.

Ответы

Ответ 1

Подход - 1

Фильтр действий

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
    }
}

Метод действий

[MyActionFilter]
public ActionResult Index()
{
    ViewBag.ControllerVariable = "12";
    return View();
}

enter image description here

Если вы обратите внимание на скриншот, вы можете увидеть информацию ViewBag

Подход - 2

Фильтр действий

public class MyActionFilter : ActionFilterAttribute
{
    //Your Properties in Action Filter
    public string Property1 { get; set; }
    public string Property2 { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
    }
}

Метод действий

[MyActionFilter(Property1 = "Value1", Property2 = "Value2")]
public ActionResult Index()
{
    return View();
}