Reputation: 17677
I created a custom Action Filter with no problem.
But I would like to modify the Action Filter to use some of the parameters actually passed to my method.
So if I have the following method:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
How can I get access to userId from within MyAttribute
? Is there a way I can directly pass it in?
Upvotes: 12
Views: 5170
Reputation: 1
You can create a custom attribute which derives from FilterAttribute
and implements IAuthorizationFilter
.
You should also be able to get the user information in the OnAuthorization
method by accessing filterContext.HttpContext.User.Identity
without the need to pass the userid.
Upvotes: 0
Reputation: 2086
You can try OnActionExecuting
override, where you do have access to action parameters.
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!
}
}
}
}
Upvotes: 13