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


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

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

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

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

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


7952
2017-08-30 18:36


起源

我认为没有办法访问传入该参数的USER Id。可能有一种方法可以访问登录到系统的用户的USER ID。并且您可以访问View数据中的任何内容......但即使您可以,我也不建议您使用该路线。 - AwDogsGo2Heaven


答案:


你可以试试 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!            
            }
        }
    }
} 

13
2017-08-30 18:51





您可以创建派生自的自定义属性 FilterAttribute 和工具 IAuthorizationFilter

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


0
2017-08-30 18:45



我不认为他一定在寻找已登录的用户ID,看起来更像是他正在创建一个管理页面来查看任何用户。 - Erik Funkenbusch