-->

MVC操作过滤器使用传递给为的ActionResult参数?(MVC Action Filters

2019-07-31 07:09发布

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

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

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

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

我怎样才能从内部可以访问用户id MyAttribute ? 有没有一种方法我可以直接通过它?

Answer 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!            
            }
        }
    }
} 


Answer 2:

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

你也应该能够获得的用户信息OnAuthorization通过访问方法filterContext.HttpContext.User.Identity ,而不需要通过用户ID。



文章来源: MVC Action Filters using parameters passed to the for ActionResult?