我知道,我可以使用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)
{ ... }
编辑
我假设你正在寻找做参数名的别名。 这是给你的灵活性,让您的paramater名称的多个别名。
ActionParameterAlias.ParameterAlias重载
如果是这样,你可以给别名像下面。
[ParameterAlias("Original_Parameter_Name",
"New_Parameter_Name")]
[ParameterAlias("Original_Parameter_Name",
"New_Parameter_Name1")]
[ParameterAlias("Original_Parameter_Name",
"New_Parameter_Name2")]
[ParameterAlias("Original_Parameter_Name",
"New_Parameter_Name3")]
公众的ActionResult ActionMethod(型号的parameterValue){返回查看(的parameterValue); }
原贴
试试这个。
属性
public class NewAuthoriseAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionParameters.ContainsKey("id"))
{
var id = filterContext.ActionParameters["id"] as Int32?;
}
}
}
操作方法
请务必设置参数类型为空的,以避免运行时发生崩溃。
[NewAuthoriseAttribute]
public ActionResult Index(Int32? id)
{
}