How to get raw query generated by Elasticsearch NEST library for debugging purpose

Source: https://stackoverflow.com/questions/28939022/get-raw-query-from-nest-client/50023531#50023531

For NEST / Elasticsearch.NET v6.0.2, use the ApiCall property of the IResponse object. You can write a handy extension method like this:

public static string ToJson(this IResponse response)
{
    return Encoding.UTF8.GetString(response.ApiCall.RequestBodyInBytes);
}

Or, if you want to log all requests made to Elastic, you can intercept responses with the connection object:

var node = new Uri("https://localhost:9200");
var pool = new SingleNodeConnectionPool(node);
var connectionSettings = new ConnectionSettings(pool, new HttpConnection());
connectionSettings.OnRequestCompleted(call =>
{
    Debug.Write(Encoding.UTF8.GetString(call.RequestBodyInBytes));
});

You need to call on the ES client connection setting object to allow reading request JSON. This is best done on DEBUG mode.

connectionSettings.DisableDirectStreaming(true)