Как передать переменные в пользовательский 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();
}