Méthode recommandée pour la gestion des erreurs avec l’API Web ASP.NET

Pourriez-vous préciser quelle est la meilleure pratique en matière de gestion des erreurs de l’API Web? En fait, je ne sais pas si c’est une bonne pratique d’utiliser essayer de saisir ma demande Api.

public Vb.Order PostOrderItem(Vb.Order order) { if (OAuth.isValid(Request.Headers.GetValues("Token").Single()) != true) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized); throw new HttpResponseException(httpResponseMessage); } if (!ModelState.IsValid) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.BadRequest); throw new HttpResponseException(httpResponseMessage); } try { return Vb.Document.Generate(order); } catch (Exception ex) { logger.Error(ex); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.BadRequest); httpResponseMessage.Content = new SsortingngContent(ex.Message); throw new HttpResponseException(httpResponseMessage); } } 

J’ai l’impression qu’essayer d’attraper un code côté serveur n’est pas une bonne pratique, car je viens d’enregistrer mon attrape et de relancer une exception.

La gestion des erreurs dans les API Web est considérée comme une préoccupation transversale et doit être placée ailleurs dans le pipeline afin que les développeurs n’aient pas besoin de se concentrer sur des préoccupations transversales.

Vous devriez lire le traitement des exceptions dans l’API Web ASP.NET.

Que se passe-t-il si un contrôleur API Web génère une exception non interceptée? Par défaut, la plupart des exceptions sont traduites en une réponse HTTP avec le code d’état 500, Erreur interne du serveur.

ainsi que la gestion globale des erreurs dans l’API Web ASP.NET 2

Vous devriez essayer de garder votre contrôleur maigre autant que possible. La gestion des erreurs, telle que votre code d’origine, entraînera uniquement une duplication du code et des préoccupations inutiles que les développeurs ne doivent pas ignorer. Les développeurs doivent se concentrer sur la préoccupation principale et non sur les préoccupations transversales. En nous concentrant simplement sur le coeur du problème, le code ci-dessus ressemblera à ceci:

 [MyAuthentication] [MyValidateModel] public Vb.Order PostOrderItem(Vb.Order order) { return Vb.Document.Generate(order); } 

Pourquoi si maigre?

Parce que :

 if (OAuth.isValid(Request.Headers.GetValues("Token").Single()) != true) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized); throw new HttpResponseException(httpResponseMessage); } 

peuvent être déplacés dans les filtres d’authentification de l’API Web ASP.NET 2, qui peuvent être appliqués localement sur le contrôleur / action ou globalement pour renvoyer une réponse pertinente.

Validation de modèle dans l’API Web ASP.NET, comme ceci

 if (!ModelState.IsValid) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.BadRequest); throw new HttpResponseException(httpResponseMessage); } 

Peut aussi être déplacé dans un filtre comme:.

 public class MyValidateModelAtsortingbute : ActionFilterAtsortingbute { public override void OnActionExecuting(HttpActionContext actionContext) { if (!actionContext.ModelState.IsValid) { actionContext.Response = actionContext.Request.CreateErrorResponse( HttpStatusCode.BadRequest, actionContext.ModelState); } } } 

Veuillez vous référer à ce lien Gestion des exceptions dans l’API Web ASP.NET – Visite guidée . Il existe un pipeline de traitement des exceptions à 4 niveaux:

  • Niveau 1 – HttpResponseException
  • Niveau 2 – Filtres d’exception
  • Niveau 3 – Exploitation forestière
  • Niveau 4 – Gestionnaires d’exception

Les API Web nous offrent une grande flexibilité en termes de gestion des exceptions. Récapituler:

  • Utilisez HttpResponseException ou les méthodes de raccourci pour traiter les exceptions non gérées au niveau action.
  • Utilisez les filtres d’exception pour gérer des exceptions particulières non gérées sur plusieurs actions et contrôleurs.
  • Utilisez ExceptionLogger pour consigner toute exception non gérée.
  • Utilisez des gestionnaires d’exception (un par application) pour traiter toute exception non gérée à l’échelle de l’application.

Il y a un certain nombre de méthodes, chacune augmentant le graphe d’object logique;

Cet article les répertorie tous. http://www.codeproject.com/Articles/850062/Exception-handling-in-ASP-NET-MVC-methods-explaine

Je trouve utile d’utiliser une des méthodes de niveau supérieur afin d’éviter les doublons de code.