Le retour d'Erreurs dans l'API Web
Je suis le développement d'une nouvelle marque à l'aide de l'API REST ASP.NET l'API Web. Venant d'un WCF fond, je me sens attirée par la création d'erreur "contrats" pour mon API.
Dans ce cas, je ne parle pas des exceptions non gérées être retournés au client. Au lieu de cela, je me concentre sur les erreurs telles que l'API utilisée de manière incorrecte par le client - en particulier ceux où le client peut créer automatiquement ces erreurs et de soumettre à nouveau la demande.
La plupart des exemples que j'ai trouvé juste une chaîne de caractères à renvoyer, généralement en jetant un HttpResponseException, ou au moins de faire quelques choses pour rendre le processus de construction d'une erreur informatif plus de chaîne automatisée: De retour d'erreur personnalisé des objets de l'API Web
Je suis en train de réfléchir à la place de la création d'un HttpResponseException, en passant un HttpResponseMessage dont le contenu est fixé pour mon erreur spécifique au type de contrat.
Mon API est également fait un usage intensif de automatique de la validation du modèle, cependant, et ceux du modèle de validation des erreurs de revenir comme un être totalement différent de la structure.
Donc dois-je la force de mes "erreurs" dans le même format que le modèle de validation de réponses? Quelles sont les meilleures pratiques?
Enfin, mon API permettra d'exposer les options de mise en forme de json, xml et le protocole sur les zones tampons. En conséquence, j'ai vraiment besoin de vous assurer que ma stratégie est formateur indépendant.
OriginalL'auteur RMD | 2013-05-26
Vous devez vous connecter pour publier un commentaire.
J'ai écrit ce billet de blog d'un moment de retour sur la manière dont le Web API gestion des erreurs:
http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
Il devrait aider à répondre à vos questions. Essentiellement, vous avez deux options:
Définir votre propre classe pour les réponses d'erreur. Dans ce cas, vous voulez vous assurer que votre classe peut être sérialisé en XML, JSON, etc. Ensuite, vous pouvez utiliser
Request.CreateResponse(statusCode, myErrorInstance)
à envoyer vos messages d'erreur personnalisés. Vous avez sans doute aussi besoin d'un moyen de tourner modèle invalide unis dans votre type d'erreur.Utiliser l'API Web de la réponse d'erreur de type: HttpError. HttpError est essentiellement un
Dictionary<string, object>
vous permet d'ajouter vos propres clés et des valeurs de la HttpError. Les avantages sont nombreux - vos erreurs ressemblera le Web les erreurs de l'API, vous savez qu'il fonctionne avec tous les formateurs, et vous pouvez éviter le travail de définir les transformations des exceptions et modèle invalide unis. Le moyen le plus facile à utiliser HttpError appelleRequest.CreateErrorResponse()
.OriginalL'auteur Youssef Moussaoui
Vous pouvez faire ce que vous voulez dans ces situations. La meilleure expérience pour le consommateur de votre api web serait de faire en sorte que vous utilisez amicale des messages d'erreur, dans ce cas, vous aurez envie de sérialiser vos erreurs dans bien formaté objets json. Le blog suivant fournit quelques cas d'utilisation et une solution que je suis venu avec: L'Api Web, HttpError et le Comportement des Exceptions
OriginalL'auteur Andy Cohen