Фильтры действий 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 без необходимости передавать идентификатор пользователя.

Другие вопросы по тегам