2016-09-15 5 views
2

J'ai une méthode API où le paramètre Id est annotées avec attribut CacheTypeComment puis-je lire la valeur d'attribut de paramètre dans le filtre d'action api web

public Object Get([CacheType(CacheTypes.Venue)]int Id) 
{ 
      .... 
} 

lire la valeur de l'attribut de paramètre à l'intérieur de ActionFilterAttribute

public class CacheOutputAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     //read CacheType value 
    } 
} 
+0

avez-vous attaché quelque chose vous-même ou copiez-vous simplement du code sur le net et nous demander de faire le travail pour vous? –

+0

C'est possible avec l'aide de Reflection – Fabjan

Répondre

3

Pour accéder à la collection de paramètres de méthode en cours d'exécution, vous invoquez

actionContext.ActionDescriptor.GetParameters() 

Vous pouvez que itérer à travers la collection de HttpParameterDescriptor et de trouver le paramètre dont vous avez besoin . Vous pouvez le faire par nom, index ou tout autre moyen approprié.

Ensuite, vous pouvez utiliser la méthode GetCustomAttributes<TClass>() définie dans l'objet de type HttpParameterDescriptor pour vérifier si le paramètre est marqué avec l'attribut de type TClass. Si vous avez besoin d'une instance de l'attribut pour vérifier la valeur, récupérez-la simplement dans la collection d'attributs résultante (si trouvée).

1

Pour obtenir la valeur du paramètre

actionContext.ActionArguments["id"] 

Pour s uelque chose avec les paramètres qui ont CacheOutput attribut

actionContext.ActionDescriptor.GetParameters().ToList().ForEach(p => 
{ 
    var cacheOutput = p.GetCustomAttributes<CacheOutputAttribute>(); 
    if (cacheOutput.Any()) 
    { 
     // do something 
    } 
}); 
+1

Les ActionArguments ne contiennent-ils pas seulement des paires nom/valeur et pas des métadonnées de l'argument de la méthode? – kiziu

+0

mise à jour de réponse avec des informations supplémentaires – ubi