Фильтры действий MVC с использованием параметров, переданных для ActionResult?

Я создал собственный фильтр действий без проблем.

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

Итак, если у меня есть следующий метод:

[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
     // Do something
}

Как я могу получить доступ к userId изнутри MyAttribute? Есть ли способ, которым я могу напрямую передать это?


person Kyle    schedule 30.08.2012    source источник
comment
Я не думаю, что есть способ получить доступ к идентификатору USER, который передается в этот параметр. Вероятно, есть способ получить доступ к идентификатору USER пользователя, вошедшего в вашу систему. И вы можете получить доступ к чему-либо в данных просмотра ... но я бы не рекомендовал идти по этому пути, даже если бы вы могли.   -  person AwDogsGo2Heaven    schedule 30.08.2012


Ответы (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!            
            }
        }
    }
} 
person danielQ    schedule 30.08.2012

Вы можете создать собственный атрибут, производный от FilterAttribute и реализующий IAuthorizationFilter.

Вы также должны иметь возможность получить информацию о пользователе в методе OnAuthorization, обратившись к filterContext.HttpContext.User.Identity без необходимости передачи идентификатора пользователя.

person ajkhond    schedule 30.08.2012
comment
Я не думаю, что он обязательно ищет идентификатор вошедшего в систему пользователя, это больше похоже на то, что он создает страницу администратора для просмотра любого пользователя. - person Erik Funkenbusch; 31.08.2012