Comment puis-je obtenir StatusCode de HttpRequestException?
Je suis probablement manquer quelque chose d'évident.
Je suis en utilisant HttpClient
qui jette HttpRequestException
qui contient StatusCode
dans la chaîne de Message.
Comment puis-je accéder que StatusCode
?
Modifier: Plus d'info, j'ai écrit à cette question dans rush.
Je suis en utilisant HttpClient
d'accéder à un autre API dans mon WebApi projet. Oui, je sais pourquoi je t'appelle EnsureSuccessStatusCode()
. Je tiens à propager des erreurs en aval tels que les 404 et 403.
Tout ce que je voulais, c'était de toujours transformer HttpRequestException
en HttpResponseException
à l'aide personnalisée ExceptionFilterAttribute
.
Malheureusement, HttpRequestException
ne portent pas plus d'info que je pourrais utiliser en plus le message. J'espérais découvrir StatusCode
en raw (int ou enum) forme.
Ressemble je peux soit:
- Utiliser le message pour changer le code de statut (bleh)
- Ou de créer ma version de EnsureSuccessStatusCode et jeter l'exception qui est réellement utilisable.
- Pouvez-vous montrer un bout de code?
- Qu'entendez-vous par "accès code d'état"?
- Montrer le code dire où vous êtes l'obtention de l'exception.
- Les gars ce n'est pas clair sur le titre de cette question?
- Avez-vous réussi à trouver une solution à ce problème? merci de partager
- Non, j'ai eu à jeter mes propres exceptions.
- yep, j'ai écrit ma propre extension pour remplacer EnsureSuccessStatusCode, peut être trouvé ici: stackoverflow.com/questions/21097730/...
Vous devez vous connecter pour publier un commentaire.
Code de statut a été adopté dans le cadre d'une chaîne de
HttpRequestException
de sorte que vous ne pouvez pas le récupérer à partir de ces exceptions seul.La conception de
System.Net.Http
vous oblige à accéderHttpResponseMessage.StatusCode
au lieu d'attendre que l'exception.http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage(v=vs. 110).aspx
Si vous êtes maintenant en suivant le guide de Microsoft, assurez-vous de comprendre clairement pourquoi il vous demande de l'appeler
HttpResponseMessage.EnsureSucessStatusCode
. Si vous n'avez pas appeler cette fonction, il devrait y avoir aucune exception.Pour ce que sa vaut, ce gars a fait quelque chose d'intelligent:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/dc9bc426-1654-4319-a7fb-383f00b68def/c-httpresponsemessage-throws-exception-httprequestexception-webexception-the-remote-name?forum=csharpgeneral
Dans le cas où j'ai besoin d'un état d'exception de la propriété, je peux le faire:
Comme mentionné par d'autres, ainsi il n'est pas une bonne pratique pour obtenir les StatusCode de HttpRequestException, la même chose peut être fait à l'avance avec HttpResponseMessage.StatusCode après vérification HttpResponseMessage.IsSuccessStatusCode
De toute façon, si en raison de certaines contraintes ou des exigences qu'on a à lire StatusCode,
Il peut y avoir deux solutions
Ci-dessous est le code dans le Système.Net.Http.HttpResponseMessage
Où SR.net_http_message_not_success_statuscode ="code d'état de Réponse n'indique pas le succès: {0} ({1})."
Ce qui a fonctionné pour moi