MVC Action Filters с использованием параметров, переданных в ActionResult?
Я создал собственный Action Filter без проблем.
Но я хотел бы изменить фильтр действий, чтобы использовать некоторые параметры, фактически переданные моему методу.
Итак, если у меня есть следующий метод:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
Как я могу получить доступ к userId из MyAttribute
? Есть ли способ, которым я могу напрямую передать его?
Ответы
Ответ 1
Вы можете попробовать переопределить 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!
}
}
}
}
Ответ 2
Вы можете создать настраиваемый атрибут, полученный из FilterAttribute
и реализующий IAuthorizationFilter
.
Вы также можете получить информацию о пользователе в методе OnAuthorization
, обратившись к filterContext.HttpContext.User.Identity
без необходимости передавать идентификатор пользователя.