2017-05-19 2 views
0

J'écris un ActionFilterAttribute personnalisé afin de gérer une logique métier avant que la requête n'atteigne l'action dans l'API .Net Core Web. (Core v1.1) Le gestionnaire est en cours d'exécution avec succès par OnActionExecuting, mais je ne suis pas en mesure d'extraire ses données envoyées au format JSON provenant du corps de la demande. J'ai essayé de plusieurs façons, comme lire le corps du flux ActionExecutingContext (qui est vide), accéder à la propriété Form (mais comme json, ça ne marche pas), et d'autres solutions mais pas de chance là-dessus.Récupère les données JSON du corps de la demande sur l'API .NET Core Web dans ActionFilterAttribute

Ceci est le code de mon ActionFilter, qui est vide, puisque le problème ici est fondamentalement le besoin d'extraire ses données, donc le code ne serait pas pertinent.

public class AccountRestrictionAttribute : ActionFilterAttribute 
{ 
    public override async void OnActionExecuting(ActionExecutingContext context) 
    {  
    } 
} 

Répondre

0

crédit réponse va à rynowak, je l'ai trouvé ici https://github.com/aspnet/Mvc/issues/5260

ModelBinding fonctionne avant les filtres d'action, donc si vous avez des données de formulaire ou un paramètre [FromBody], nous avons déjà lu. Oui, si vous êtes dans un filtre d'action, context.ActionArguments contiendra tous les objets du modèle que nous avons créés. Donc, si vous avez:

public IActionResult Edit(int id, [FromBody] Widget widget) { } 

Ensuite context.ActionArguments ["widget"] retournera l'objet Widget. Si vous essayez de le faire de manière générique, regardez context.ActionDescriptor.Parameters - ceci contiendra toutes les définitions de paramètres et les métadonnées.

+0

ouais, j'ai trouvé le même lien un peu plus tôt, mais merci quand même mate. – user2761172