78

私はRestSharpWebサービスを呼び出すために使用しています。すべて順調ですが、送信される生のリクエストヘッダーと本文、および返される生の応答ヘッダーと応答本文を印刷できるかどうか疑問に思っていました。

これは、リクエストを作成してレスポンスを返すコードです

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;
}

それで、生のリクエストとレスポンスを印刷することは可能でしょうか?

4

8 に答える 8

30

.net は独自の強力なログ機能を提供します。これは、構成ファイルを介して有効にすることができます。

このヒントはこちらで見つかりました。John Sheehan は、How to: Configure Network Tracing記事を指摘しました。(注:提供された構成を編集し、不要な(私にとって)低レベルのログをオフにしました)。

  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="protocolonly" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.Cache">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.Http">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
      <add name="System.Net.Cache" value="Verbose"/>
      <add name="System.Net.Http" value="Verbose"/>
      <add name="System.Net.Sockets" value="Verbose"/>
      <add name="System.Net.WebSockets" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="network.log"
      />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
于 2014-02-24T14:00:51.647 に答える
8

RestSharp の例で以下のコードを見つけました。生の応答を印刷できます。

client.ExecuteAsync(request, response =>
                   {
                       Console.WriteLine(response.Content);
                   });
于 2013-06-26T21:25:53.437 に答える
7

リストをループして、request.Parameters好きな形式の文字列にフォーマットする必要があります。

var sb = new StringBuilder();
foreach(var param in request.Parameters)
{
    sb.AppendFormat("{0}: {1}\r\n", param.Name, param.Value);
}
return sb.ToString();

出力に要求ヘッダーを表示してから、Fiddler と同様の本文を表示する場合は、コレクションを要求ヘッダーで並べ替え、次に要求本文で並べ替えるだけです。コレクション内のParameterオブジェクトには、Typeパラメーター列挙があります。

于 2016-01-18T23:28:50.590 に答える
0

BuildUri部分的な解決策として、RestClient のメソッドを使用できます。

var response = client.Execute(request);
if (response.StatusCode != HttpStatusCode.OK)
    throw new Exception($"Failed to send request: {client.BuildUri(request)}");
于 2016-07-01T11:39:54.867 に答える