HttpRequestMessage.Content est perdu lorsqu'il est lu dans une délégation DelegatingHandler dans l'API Web ASP.Net

Lorsque vous tentez d'un objet dans une Action d'un Contrôleur, il sporadiquement semble être null. J'ai découvert que c'est dû à la ReadAsStringAsync() dans le SendAsync() remplacement de la DelegatingHandler. Le problème est avec le contenu. Quand mon client envoie un contenu en corps et en lecture de l'enregistreur de données, il n'est jamais lu par le Contrôleur de l'Action de l'Appelant (ou peut-être quelque part dans le JsonFormatter). Je soupçonne l'appel suivant à Content.ReadAsStringAsync() ne pas lever une exception, mais aussi ne pas retourner le contenu du corps (un peu d'info est renvoyée indiquant que l'async lecture est terminée).

Mais mon problème reste le même depuis que j'ai envie de lire un [FromBody] paramètre dans une action, et elle est nulle lorsque le RaceCondition de Content.ReadStringAsync est remporté par le DelegatingHandler. Lorsque JsonFormatter gagne bien, je reçois l'objet, mais c'est rare (seulement au démarrage du service).

Voici mon DelegatingHandler code:

public class LogHandler : DelegatingHandler
{

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var apiRequest = new WebApiUsageRequest(request);
        WriteLog(apiRequest);
        request.Content.ReadAsStringAsync().ContinueWith(t =>
        {
            apiRequest.Content = t.Result;
            WriteLog(apiRequest);
        });

        return base.SendAsync(request, cancellationToken).ContinueWith(task =>
        {
            var apiResponse = new WebApiUsageResponse(task.Result);
            apiResponse.Content = task.Result.Content != null ? task.Result.Content.ReadAsStringAsync().Result : null;
            WriteLog(apiResponse);
            return task.Result;
        });
    }
}

Quelqu'un a une idée pour trouver une solution à ce problème?

source d'informationauteur Sando