我创建了一个自定义的行为过滤器没有问题。
但我想修改的行为过滤器使用一些实际传递给我的方法的参数。
所以,如果我有以下方法:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
我怎样才能从内部可以访问用户id MyAttribute
? 有没有一种方法我可以直接通过它?
我创建了一个自定义的行为过滤器没有问题。
但我想修改的行为过滤器使用一些实际传递给我的方法的参数。
所以,如果我有以下方法:
[HttpPost]
[MyAttribute]
public ActionResult ViewUserDetails(Guid userId)
{
// Do something
}
我怎样才能从内部可以访问用户id 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
,而不需要通过用户ID。