Web Api Paramètre Requis
À l'aide de ASP.NET l'API Web. Est-il un moyen pour retourner automatiquement un code d'état 400 si un paramètre est null? J'ai trouvé ce question mais c'est une solution globale qui est appliqué à toutes les méthodes, je veux le faire par la méthode par paramètre de base.
Ainsi, par exemple, c'est ce que je fais actuellement:
public HttpResponseMessage SomeMethod(SomeNullableParameter parameter)
{
if (parameter == null)
throw new HttpResponseException(HttpStatusCode.BadRequest);
//Otherwise do more stuff.
}
Je voudrais vraiment juste envie de faire quelque chose qui ressemble à ceci (notez l'attribut obligatoire):
public HttpResponseMessage SomeMethod([Required] SomeNullableParameter parameter)
{
//Do stuff.
}
- Serait un filtre être acceptable?
- Oui, je pense que quelque chose déclaratif solution serait parfait.
- À partir de Asp.Net de Base 2.1 il y a un buit-dans la validation. Voir ma réponse stackoverflow.com/a/54533218/245460
Vous devez vous connecter pour publier un commentaire.
L'approche que j'ai utilisé était de créer un filtre personnalisé que j'ai enregistrés à l'échelle mondiale. Le filtre vérifie tous les paramètres de la demande pour le
RequiredAttribute
. Si l'attribut est trouvé, alors il vérifie si le paramètre a été transmis avec la demande (non nulle) et renvoie le code d'état 400 si il était nul. J'ai aussi ajouté de la mémoire cache de filtre pour stocker les paramètres requis pour chaque demande pour éviter la réflexion de frapper sur les futurs appels. J'ai été agréablement surpris de trouver que cela fonctionne pour les types de valeur, car le contexte d'action stocke les paramètres comme des objets.ÉDITION - mise à Jour de la solution basée sur tecfield commentaire
ConcurrentDictionary
au lieu de normalDictionary
qui n'est pas thread-safe!POST
modèles? I. e. où le paramètre est une classe d'un genre qui a des champs qui sont[Required]
.Ensemble
[Required]
sur une propriété dans votre modèle, puis de vérifier laModelState
pour voir si ilIsValid
.Cela permettra à toutes les propriétés requises pour être testés en même temps.
Voir le "Sous-Publication" de la section @ La validation du modèle dans WebAPI
Une solution pour asp.net core...
La solution retenue prend sur lui de rapporter toutes les erreurs. Une approche plus appropriée pour MVC5 est de laisser le contrôleur de la poignée (via la validation du modèle) le signalement des erreurs, aka quelque chose comme ceci:
Vous pouvez ensuite brancher universellement via WebApiConfig.cs: