RestSharp impression raw demande et en-têtes de réponse
Je suis en utilisant RestSharp
de faire des appels à un service web. Tout est bien mais je me demandais si il serait possible d'imprimer la demande brute en-têtes et le corps qui est envoyé et le raw en-têtes de réponse et le corps de la réponse qui revient.
C'est mon code où je créer une demande et d'obtenir une réponse en retour
public static TResponse ExecutePostCall<TResponse, TRequest>(String url, TRequest requestData, string token= "") where TResponse : new()
{
RestRequest request = new RestRequest(url, Method.POST);
if (!string.IsNullOrWhiteSpace(token))
{
request.AddHeader("TOKEN", token);
}
request.RequestFormat = DataFormat.Json;
request.AddBody(requestData);
//print raw request here
var response = _restClient.Execute<TResponse>(request);
//print raw response here
return response.Data;
}
donc, Serait-il possible d'imprimer la crue de demande et de réponse?
- voulez-vous faire ça à chaque fois ou juste pour déboguer quelque chose? si seulement un one-off puis utiliser un violon pour obtenir les premières demandes de va-et-vient
- Pas une réponse complète, mais vous pouvez écrire votre propre sérialiseur/deserializer et journal de la genereated consommée JSON là. Mais vous pourriez être mieux avec une "reniflage" de proxy comme suggéré ci-dessus.
- J'ai été en utilisant le violoneux. Je veux faire cela à chaque fois dans mon .net application.
- faites u ont besoin de la corps ou uniquement les en-têtes? "tout" semble un peu exagéré, mais je ne sais pas ce que c'est que vous voulez exactement.
- Je veux le code de réponse HTTP et le corps de la réponse.. pour une demande, j'ai besoin de la méthode et de l'url et le corps de la requête.
- J'ai trouvé ce par le biais d'une recherche sur google et a été en mesure de le comprendre, à l'aide de Restsharp. Voir ma réponse ci-dessous.
- avez-vous trouvé les réponses utiles? Je pense que la mienne accomplit tout ce dont vous avez besoin, malheureusement je l'ai posté 3 ans après votre question 😛 Mais peut-être que vous pourriez accepter de toute façon si vous jugez utiles. Merci!
Vous devez vous connecter pour publier un commentaire.
Comme nous le savons déjà RestSharp ne fournit pas un mécanisme pour obtenir exactement ce que vous voulez et de l'activation .Net le suivi est un peu overkilling de l'OMI.
Pour l'enregistrement (débogage) fins (quelque chose que je peux laisser allumé pendant un certain temps en PROD, par exemple), j'ai trouvé cette approche très utile (même s'il possède quelques détails sur la façon de l'appeler, lire ci-dessous le code):
Choses à noter:
IRestClient.BuildUri
méthode c'est assez cool à obtenir le fait appelé Uri (y compris l'url de base, le remplacement de l'url de segments, l'ajout de la queryString paramètres, etc).request.JsonSerializer.Serialize()
pour le rendu du corps paramètre (je n'ai pas essayé).StopWatch
l'utilisation peut être déplacé autour d'inclure la désérialisation de la mesure.Ici, il s'agit d'une base complète de la base de l'exemple de classe avec l'exploitation forestière (à l'aide de NLog):
Cette classe va se connecter à quelque chose comme ceci (assez formaté pour le coller ici):
Espérons que vous trouverez ce utile!
.net fournit son propre, mais puissante fonctionnalité de journalisation. Cela peut être activé via le fichier config.
J'ai trouvé cette astuce ici. John Sheehan a souligné Comment faire: Configurer le Réseau de Traçage article. (une remarque: j'ai édité le fichier de configuration fourni, éteint inutile (pour moi) le faible niveau de journalisation).
Je viens de trouver le code ci-dessous dans le RestSharp exemples. Elle vous permet d'imprimer votre première réponse.
Que vous avez à faire une boucle par la
request.Parameters
liste et le format d'une chaîne de caractères dans le format que vous souhaitez.Si vous voulez la sortie pour afficher les en-têtes de requête, puis le corps semblable à Fiddler, il vous suffit de commander la collection en-têtes de la Requête, puis par le corps de la Requête. Le
Parameter
objet dans la collection a unType
paramètre enum.Vous pouvez utiliser Fiddler pour capturer les requêtes HTTP.
Une option est d'utiliser votre propre authentificateur.
RestSharp permet d'injecter un authentificateur:
Cela signifie que dans la méthode d'authentification, vous pouvez vous connecter à la demande.
Comme une solution partielle, vous pouvez utiliser RestClient de
BuildUri
méthode:Vous pouvez essayer d'utiliser
pour obtenir la demande et
demande n'est pas la même, en tant que Violoniste de montre, mais il contient toutes les données et qu'il est lisible (avec quelques RestSharp poubelle à la fin).
Trace.WriteLine(request.JsonSerializer.Serialize(request))
ne vous donnera pas le brut demande, tout ce qu'il va faire est de sérialiser l'objet, qui est une chose complètement différente.