【发布时间】:2015-11-17 16:06:40
【问题描述】:
将变量传递给我的MyCustomAttribute 类有哪些选择?
目前该类定义为:
public class MyCustomAttribute : ActionFilterAttribute
{
public string MyIDParam { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var myID = filterContext.ActionParameters[MyIDParam] as Int32?;
// logic
}
}
现在在我的控制器中我有这个:
[MyCustomAttribute(MyIDParam = "id")]
public ActionResult Report(int id)
{
Guid userId = GetUserInfo();
// logic
}
在这种情况下,我希望能够将 id 和 userId 传递给 MyCustomAttribute 类。
这可能吗? MyCustomAttribute 不是在Report 方法的内容之前执行吗?
【问题讨论】:
-
是的,你不能那样做。就像你说的,动作过滤器代码是在动作之前执行的。
-
您可以使用请求上下文间接获取它:
filterContext.HttpContext.Request.Params["id"] -
@PaulDS 那么通过
userId怎么样?就像我说的,这是不可能的。 -
哇,有些 cmets 是不正确的。仅仅因为动作没有执行并不意味着值不存在。甚至在构造控制器之前,用户就可以使用 long。路由值(控制器方法参数)也必须在构造控制器之前创建,因为它们用于从 MapRoutes 中识别控制器/动作。
-
这包括参数,因为可以创建 Route Constraint 来询问参数以验证 MapRoute 是否可以处理请求。
标签: c# asp.net-mvc action-filter