MVC Action Filter使用传递给for ActionResult的参数?

时间:2012-08-30 18:36:30

标签: c# asp.net-mvc action-filter actionfilterattribute

我创建了一个没有问题的自定义Action Filter

但是我想修改Action Filter以使用实际传递给我的方法的一些参数。

所以,如果我有以下方法:

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

如何从MyAttribute内访问userId?有没有办法可以直接传递它?

2 个答案:

答案 0 :(得分: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!            
            }
        }
    }
} 

答案 1 :(得分:0)

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

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