Les meilleures pratiques pour la gestion des erreurs avec ASP.NET Web API
Pourriez-vous préciser quelle est la meilleure pratique avec l'API Web de gestion d'erreur. En fait, je ne sais pas si c'est une bonne pratique d'utiliser try catch dans ma demande d'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 StringContent(ex.Message);
throw new HttpResponseException(httpResponseMessage);
}
}
J'ai le sentiment utilisation de try catch pour un code côté serveur n'est pas une bonne pratique car je viens de connecter ma prise en re-lever une exception.
OriginalL'auteur Bastien Vandamme | 2016-06-25
Vous devez vous connecter pour publier un commentaire.
Erreur de manipulation de l'API Web est considéré comme une préoccupation horizontale et doit être placé à un autre endroit dans le pipeline afin que les développeurs n'ont pas besoin de se concentrer sur les sujets transversaux.
Vous devriez prendre une lecture de La gestion des exceptions dans ASP.NET Web API
et aussi Mondial de la gestion d'Erreurs ASP.NET Web API 2
Vous devriez essayer de garder votre contrôleur maigre autant que possible. Erreur de manipulation, comme votre code d'origine n'aura qu'à la duplication de code, et des inquiétudes inutiles pour les développeurs d'être conscient de. Les développeurs devraient se concentrer sur le cœur, pas la croisée des préoccupations. Simplement en se concentrant sur la base de préoccupations ci-dessus le code ressemblera à ceci:
Pourquoi si maigre?
Parce que :
peut être déplacé dans L'authentification des Filtres dans ASP.NET Web API 2
qui peut être appliqué localement sur le contrôleur/action ou à l'échelle mondiale pour renvoyer une réponse.
La Validation du modèle dans ASP.NET Web API comme ce
Peut également être déplacé dans un filtre comme ceci : .
Vous pouvez toujours l'utiliser. Et il est jusqu'à un outil utile. Il complimente les stratégies mentionnées dans les liens fournis dans la réponse que vous pouvez passer/journal des erreurs sur elmah qui se trouve sur la périphérie. le plugable nature de elmah montre comment il se concentre sur la lutte contre les sujets transversaux ainsi.
Comment sur le code
logger.Error(ex);
dans la question? SupposonsVb.Document.Generate(order)
est une base de données d'appel et je voudrais enregistrer l'exception s'est passé. Et de renvoyer le message d'erreur de la réponse json.qu'aurait fait dans les gestionnaires d'erreur. Vous consommez de l'erreur et retour à une interface utilisateur conviviale réponse json. Vérifier le lien fourni sur la gestion des exceptions.
OriginalL'auteur
Veuillez vous référer à ce lien La gestion des exceptions dans ASP.NET l'API Web - UNE Visite Guidée. Il y a 4 niveau de la gestion des exceptions pipeline:
OriginalL'auteur
Il y a un certain nombre de méthodes, chacune plus loin la logique de l'objet graphique;
Cet article répertorie toutes;
http://www.codeproject.com/Articles/850062/Exception-handling-in-ASP-NET-MVC-methods-explaine
Je trouve qu'il est utile d'utiliser l'un des plus élevés des méthodes de niveau afin d'éviter de dupliquer du code.
Ils fonctionnent de la même manière que ce que je sache...
OriginalL'auteur