Передать параметр метода действия в ActionFilterAttribute в asp.net mvc
Я знаю, что могу использовать filterContext, чтобы добраться до него. Однако это не очень гибко, если параметр метода действия назван по-разному. Это должно работать:
[HttpGet]
[NewAuthoriseAttribute(SomeId = id)]
public ActionResult Index(int id)
{
...
public class NewActionFilterAttribute : ActionFilterAttribute
{
public int SomeId { get; set; }
...
но это не так (он даже не компилируется). Есть идеи?
Ответы
Ответ 1
Основываясь на ответе от @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)
{ ... }
Ответ 2
Edit
Я предполагаю, что вы хотите создать псевдоним имени параметра. Это дает вам гибкость в отношении множественного псевдонима вашего имени параметра.
![enter image description here]()
ActionParameterAlias.ParameterAlias Overloads
![enter image description here]()
Если да, вы можете указать псевдоним, как показано ниже.
[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")]
public ActionMesod ActionResult (параметр ParameterValue) { return View (ParameterValue); }
Оригинальное сообщение
Попробуйте это.
Атрибут
public class NewAuthoriseAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionParameters.ContainsKey("id"))
{
var id = filterContext.ActionParameters["id"] as Int32?;
}
}
}
Метод действий
Удостоверьтесь, что для параметра Parameter type nullable необходимо избегать RunTime Crash.
[NewAuthoriseAttribute]
public ActionResult Index(Int32? id)
{
}