Comment faire pour récupérer des messages à partir de l'API WEB?

J'ai créé certaines api web et lorsqu'une erreur se produit, l'api retourne HttpResponseMessage qui est créé avec CreateErrorResponse message. Quelque chose comme ceci:

return Request.CreateErrorResponse(
              HttpStatusCode.NotFound, "Failed to find customer.");

Mon problème est que je ne peux pas comprendre comment récupérer le message (dans ce cas "pas réussi à trouver de la clientèle.") en application du consommateur.

Voici un échantillon de la consommation:

private static void GetCustomer()
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));
    string data =
        "{\"LastName\": \"Test\", \"FirstName\": \"Test\"";

    var content = new StringContent(data, Encoding.UTF8, "application/json");

    var httpResponseMessage = 
                 client.PostAsync(
                    new Uri("http://localhost:55202/api/Customer/Find"),
                    content).Result;
    if (httpResponseMessage.IsSuccessStatusCode)
    {
        var cust = httpResponseMessage.Content.
                  ReadAsAsync<IEnumerable<CustomerMobil>>().Result;
    }
}

Toute aide est grandement appréciée.

  • Pouvez-vous poster le code où vous êtes en train d'essayer de lire le message d'erreur? Dans ce cas, le contenu du message doit vraiment être un ObjectContent avec un HttpError objet, reportez-vous à la page officielle: msdn.microsoft.com/en-us/library/jj127065(v=vs. 108).aspx de toute façon vous avez de varier la façon dont vous êtes en train de lire la réussite de l'intervention et de la réponse d'erreur tel que l'on est, bien évidemment, dans votre cas StreamContent, et les autres devraient être ObjectContent
  • c'est le code. Je ne pouvais pas comprendre comment lire le message d'erreur c'est pourquoi j'ai posté la question. Jusqu'à présent, vous avez été le plus utile personne, mais je ne l'ai toujours pas résolu mon problème. Je suis en train d'essayer plus de choses à droite en suivant votre lien. J'ai été dérouté et ne pas travailler sur ce problème. Mais maintenant, je vais essayer de faire une estimation de nouveau.
  • pouvez-vous essayer le code dans Update2 ci-dessous et voir si, en cas d'erreur vous obtenez toujours StreamContent ?
  • Je suppose que vous voulez voir le type de contenu. Voici la sortie. "le contenu est de type System.Net.Http.StreamContent." J'ai dû ajouter {0} à la sortie de la type.
  • OK, une autre question se pose alors, quand vous créez une réponse d'erreur? Dans quelle condition? Est-il juste au cas où des exceptions ? Notez que IsSuccessfulStatusCode évalue à true seulement si le code d'état a été dans 200-299. Se pourrait-il que pour un code de statut spécifique, 400, vous attendez un message d'erreur mais en fait il ne va jamais par le biais de la méthode/de filtre qui est de la création d'une? Peut-être ajouter un peu de l'exploitation forestière pour voir si la méthode de createErrorResponse a été appelée à tous
  • Quand j'ai appeler l'api à l'aide de Fiddler ou de REPOS de la Console, je vois le message. Dans ce cas, j'ai mis HttpStatus à 400 (Demande de retour.CreateErrorResponse(HttpStatusCode.NotFound "impossible de trouver de la clientèle.");) Tout fonctionne comme prévu. J'ai juste aucune idée de comment faire pour récupérer mon message personnalisé lorsqu'une erreur se produit.
  • Je viens de réaliser que j'ai été absent de l'instanciation de la HttpClient. Juste mis à jour le code.
  • Voir la dernière mise à jour - cette fois, il faut vraiment travailler, j'ai compris pourquoi j'étais confus

InformationsquelleAutor Vadim | 2013-01-28