2017-06-08 1 views
0

J'utilise une méthode d'extension pour publier du XML en utilisant le HTTPClient qui fonctionne très bien.Est-il possible de lire les résultats du XmlSerializer envoyé par HTTPClient?

Ma question: Est-il possible de lire, de consigner ou d'afficher les résultats des données XmlSerializer qui sont envoyées/affichées?

public static class HttpExtensions { 
    public static Task<HttpResponseMessage> PostAsXmlWithSerializerAsync<T>(this HttpClient client, string requestUri, T value) 
    { 
     return client.PostAsync(requestUri 
           , value 
           , new XmlMediaTypeFormatter { UseXmlSerializer = true } 
           ); 
    } 
} 

Répondre

0

PostAsync cache le fait envoyé HttpRequestMessage de vous, mais vous pouvez le récupérer de la réponse aussi pour que vous puissiez tracer la fois le contenu de la requête et de réponse:

var response = await client.PostAsync(uri, value, formatter); 
Log(response); 

Si vous voulez vraiment enregistrer la demande seulement , créez la demande manuellement:

var request = new HttpRequestMessage(HttpMethod.Post, uri); 
request.Content = new StreamContent(myXmlStream); 
Log(request); 
var response = await client.SendAsync(request); 
Log(response); 

et vous pouvez maintenant créer un ou deux Log surcharges. Je le montre pour la réponse, qui comprend à la fois le journal des demandes et des réponses. Ceci est indépendant du format, fonctionne pour le contenu XML et json.

protected virtual void Log(HttpResponseMessage response) 
{ 
    // Use any log/trace engine here, this example uses Debug 
    Debug.WriteLine($"Response of the API Call [{response.RequestMessage.Method}] {response.RequestMessage.RequestUri}: {response.StatusCode} {FormatResponse(response)}"); 
} 

private static string FormatResponse(HttpResponseMessage response) 
{ 
    var result = new StringBuilder(); 
    result.AppendLine(); 
    result.AppendLine("Original request:"); 
    result.AppendLine(FormatHttpMessage(response.RequestMessage.Headers, response.RequestMessage.Content)); 
    result.AppendLine(); 
    result.AppendLine("Obtained response:"); 
    result.AppendLine(FormatHttpMessage(response.Headers, response.Content)); 
} 

private static string FormatHttpMessage(HttpHeaders headers, HttpContent content) 
{ 
    var result = new StringBuilder(); 
    var headersString = headers.ToString(); 
    if (!string.IsNullOrWhiteSpace(headersString)) 
    { 
     result.AppendLine("Headers:"); 
     result.AppendLine(headersString); 
     result.AppendLine(); 
    } 

    if (content != null) 
    { 
     result.AppendLine("Content:"); 
     result.AppendLine(content.ReadAsStringAsync().Result); 
    } 

    return result.ToString(); 
} 
0

Oui, vous pouvez. Télécharger et installer Fiddler, puis filtrer votre requestUri, vous pouvez surveiller toutes les données de transfert tels que xml sérialisé.