Je sais que je peux utiliser le filterContext pour y accéder. Cependant, cela n'est pas très flexible si le paramètre de méthode d'action est nommé différemment. Cela devrait fonctionner:
[HttpGet]
[NewAuthoriseAttribute(SomeId = id)]
public ActionResult Index(int id)
{
...
public class NewActionFilterAttribute : ActionFilterAttribute
{
public int SomeId { get; set; }
...
mais ce n'est pas le cas (il ne compile même pas). Des idées?
S'appuyant sur la réponse de @Pankaj et les commentaires de @csetzkorn:
Vous passez le nom du paramètre sous forme de chaîne puis vérifiez le 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)
{ ... }
Modifier
Je suppose que vous cherchez à faire le nom de l'alias du paramètre. Cela vous donne la flexibilité d'avoir plusieurs alias de votre nom de paramètre.
Surcharges ActionParameterAlias.ParameterAlias
Si oui, vous pouvez donner un alias comme ci-dessous.
[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 ActionResult ActionMethod (Model ParameterValue) {return View (ParameterValue); }
Essaye celui-là.
Attribut
public class NewAuthoriseAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionParameters.ContainsKey("id"))
{
var id = filterContext.ActionParameters["id"] as Int32?;
}
}
}
Méthode d'action
Assurez-vous de définir le type de paramètre sur nullable pour éviter le crash de RunTime.
[NewAuthoriseAttribute]
public ActionResult Index(Int32? id)
{
}