Comment puis-je obtenir le message d'erreur à partir d'un objet HttpResponse dans WebAPI?
J'ai un contrôleur qui génère une exception à partir du code suivant avec le message suivant:-
public HttpResponseMessage PutABook(Book bookToSave)
{
return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Permission");
}
suis en train de tester cette méthode avec le code suivant:-
var response = controller.PutABook(new Book());
Assert.That(response.StatusCode,Is.EqualTo(HttpStatusCode.Forbidden));
Assert.That(response.Content,Is.EqualTo("No Permission"));
Mais je reçois une erreur que le contenu n'est pas "Sans Autorisation". Il semble que je ne peux pas jeter la réponse à une HttpError
d'obtenir soit le contenu du message "Pas d'Autorisation". Le code d'état est retourné amende. Juste de la difficulté à obtenir le message content
.
Il me semble avoir une sorte de solution pour ce qui est de l'utilisation de la réponse.Contenu.ReadAsAsync<HttpError>().Résultat de me donner le message. Vous ne savez pas si il ya une meilleure façon.
OriginalL'auteur TDD Junkie | 2013-06-13
Vous devez vous connecter pour publier un commentaire.
Que vous avez trouvé dans votre commentaire, vous pouvez soit utiliser
response.Content.ReadAsAsync<HttpError>()
ou vous pouvez aussi les utiliserresponse.TryGetContentValue<HttpError>()
.Dans ces deux cas, le contenu est vérifié pour voir si son de type
ObjectContent
et la valeur est récupérée à partir d'elle.Quand j'ai vu que vous mentionnez TryGetContentValue j'étais perplexe, car je n'avais jamais vu cela avant et il n'est pas asynchrone. Maintenant je me rends compte que c'est vraiment utile pour traiter les réponses sur le serveur avant qu'ils ont été transmis sur le fil. Je me demande combien de personnes vont essayer de l'utiliser que sur le client et se demander pourquoi il ne revient jamais un résultat valide.
ouais...bon...c'est utile uniquement sur le serveur...
TryGetContentValue
est présent dansSystem.Web.Http
dll, de sorte que les clients ne devraient pas être de la voir, dans la majorité des cas.OriginalL'auteur Kiran Challa
Essayer celui-ci.
response.Content.ReadAsAsync<HttpError>().Result.Message;
OriginalL'auteur aiapatag
Vous pouvez essayer ce qui suit:
var errorContent = await response.Content.ReadAsAsync<HttpError>();
Assert.That(errorContent.Message,Is.EqualTo("No Permission"));
OriginalL'auteur Nikoloz Pachuashvili