12

我创建了一个没有问题的自定义操作过滤器。

但我想修改动作过滤器以使用实际传递给我的方法的一些参数。

所以如果我有以下方法:

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

如何从内部访问 userId MyAttribute?有没有办法直接传进去?

4

2 回答 2

13

您可以尝试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!            
            }
        }
    }
} 
于 2012-08-30T18:51:20.060 回答
0

您可以创建一个派生自FilterAttribute并实现的自定义属性IAuthorizationFilter

您还应该能够OnAuthorization通过访问filterContext.HttpContext.User.Identity而不需要传递用户标识来获取方法中的用户信息。

于 2012-08-30T18:45:40.087 回答