Фильтры действий MVC, использующие параметры, переданные для for ActionResult?
Я создал собственный фильтр действий без проблем.
Но я хотел бы изменить фильтр действий, чтобы использовать некоторые параметры, фактически переданные моему методу.
Так что, если у меня есть следующий метод:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
Как я могу получить доступ к userId изнутри MyAttribute
? Есть ли способ, которым я могу напрямую передать это?
2 ответа
Решение
Ты можешь попробовать OnActionExecuting
переопределить, где у вас есть доступ к параметрам действия.
public class MyAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionParameters.ContainsKey("userId"))
{
var userId = filterContext.ActionParameters["userId"] as Guid;
if (userId != null)
{
// Really?! Great!
}
}
}
}
Вы можете создать собственный атрибут, который происходит от FilterAttribute
и реализует IAuthorizationFilter
,
Вы также должны быть в состоянии получить информацию о пользователе в OnAuthorization
метод доступа filterContext.HttpContext.User.Identity
без необходимости передавать идентификатор пользователя.