Sur les filtres d'autorisation Asp.net Web Api, comment accéder aux paramètres?
Je suis en commençant par Asp.Net l'API Web et voici mon problème :
- Je mettre en œuvre une coutume autorisation filtre à inspecter mon message d'en-tête de la recherche d'une Clé API. Basé sur cette Clé API, j'ai récupérer mon utilisateur et puis je voudrais voir si il peut avoir accès à certaines ressources. Les ressources ID je veux vérifier, c'est sur les paramètres de la requête HTTP. Mais quand je suis sur le AuthorizationFilter méthode, les actions de la liste des paramètres est vide.
Comment puis-je le faire ?
Si j'ai utilisé un ActionFilter en remplacement d'une autorisation de filtre, comment puis-je être sûr que ce sera le premier filtre exécuté ? Et globalement, comment puis-je spécifier l'exécution de l'ordre de filtres ?
Dernière question, est-il possible d'ajouter des données "sur le tuyau" que j'ai pu récupérer sur n'importe quel filtre ? Quelque chose comme une séance de magasin, mais limitée à la demande ?
Merci pour toute réponse
source d'informationauteur Ben
Vous devez vous connecter pour publier un commentaire.
Les attributs d'autorisation exécuter avant de liaison de paramètre a exécuter, par conséquent, vous ne pouvez pas (comme vous l'avez vu) utiliser le
ActionArguments
collection. Au lieu de cela, vous aurez besoin d'utiliser l'uri de la demande pour les paramètres de la requête et de la route de données pour les paramètres d'uri comme illustré ci-dessous.Sur l'ordre d'exécution:
Il y a 3 façons de spécifier l'ordre d'exécution des filtres à l'aide de la FilterScope Énumération... portée Mondiale, le Contrôleur et l'Action. Le
AuthoriseAttribute
est "Global" et, par conséquent, ilSi vous avez besoin de spécifier l'ordre d'exécution à l'intérieur de ces 3 étendues, alors vous devriez lire cet article de blog ici où vous devrez mettre en place un
FilterProvider
Pour ajouter des données à la pipe:
Utiliser la collection de propriétés sur la demande, cette collection est disponible pour la durée de la demande.
Une autre alternative pour obtenir les paramètres de l'est de
Execute
la liaison des paramètres.Remarque: Vous devez vous assurer que vous ne filtre sur les paramètres qui viennent de l'URI de la Demande, comme j'ai remarqué que l'exécution de la liaison de tous les paramètres qui sont attendus à venir de la Demande corps ne plus passer à l'action réelle. c'est à dire ceux paramètres seront null.
C'est juste de noter que vous peut ce faire, je vous recommande d'utiliser
GetRouteData()/RouteData
comme il n'est pas susceptible de perturber l'écoulement en outre de ASP.NET MVC modelbinding.