0

監査の目的で、新しいリクエストを処理する前に、生のリクエスト (Fiddler に表示される) をファイルとして保存したいと考えています。これはどのように行うことができますか?ありがとう!

4

1 に答える 1

0

Yes, you can do it. Following is an example where I use a message handler to log incoming requests. This handler can be used to log any kind of request(not only the multipartform requests).

//add this handler in your config
config.MessageHandlers.Add(new LoggingMessageHandler());

// Logging message handler
public class LoggingMessageHandler : DelegatingHandler
{
    private StringBuilder messageBuilder = null;

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        messageBuilder = new StringBuilder();

        messageBuilder.AppendFormat("{0} {1}", request.Method.Method, request.RequestUri);
        messageBuilder.AppendLine();

        //get request headers information
        GetHeaders(request.Headers);

        //get request content's headers and body
        if (request.Content != null)
        {
            GetHeaders(request.Content.Headers);

            // NOTE 1: 
            // ReadAsStringAsync call buffers the entire request in memory.
            // So, even though you could be consuming the request's stream here, since the entire request is buffered
            // in memory, you can expect the rest of the call stack to work as expected.
            // NOTE 2:
            // Look for performance considerations when the request size is too huge.
            string body = await request.Content.ReadAsStringAsync();

            messageBuilder.AppendLine();
            messageBuilder.Append(body);
        }

        //TODO: log the message here
        //logger.Log(messageBuilder.ToString())

        // call the rest of the stack as usual
        return await base.SendAsync(request, cancellationToken);
    }

    private void GetHeaders(HttpHeaders headers)
    {
        foreach (KeyValuePair<string, IEnumerable<string>> header in headers)
        {
            messageBuilder.AppendLine(string.Format("{0}: {1}", header.Key, string.Join(",", header.Value)));
        }
    }
}
于 2013-06-15T21:30:14.437 に答える