我创建了一个没有问题的自定义操作过滤器。
但我想修改动作过滤器以使用实际传递给我的方法的一些参数。
所以如果我有以下方法:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
如何从内部访问 userId MyAttribute
?有没有办法直接传进去?
我创建了一个没有问题的自定义操作过滤器。
但我想修改动作过滤器以使用实际传递给我的方法的一些参数。
所以如果我有以下方法:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
如何从内部访问 userId MyAttribute
?有没有办法直接传进去?
您可以尝试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
而不需要传递用户标识来获取方法中的用户信息。