我知道我可以使用filterContext来获取它。但是,如果action方法参数的名称不同,则这不是很灵活。这应该工作:
[HttpGet] [NewAuthoriseAttribute(SomeId = id)] public ActionResult Index(int id) { ... public class NewActionFilterAttribute : ActionFilterAttribute { public int SomeId { get; set; } ...
但它并不(甚至不编译)。有任何想法吗?
解决方法
建立在@Pankaj的答案和@csetzkorn的评论:
将参数的名称作为字符串传递,然后检查filterContext
public class NewAuthoriseAttribute : ActionFilterAttribute { public string IdParamName { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.ActionParameters.ContainsKey(IdParamName)) { var id = filterContext.ActionParameters[IdParamName] as Int32?; } } } [NewAuthorizeAttribute(IdParamName = "fooId")] public ActionResult Index(int fooId) { ... }