APIへのリクエストとレスポンスをログに記録しようとしています。私は現在、httpwebresponsesとhttpwebrequestsをキャッチするdelegatingHandlerを使用しています。
ハンドラ:
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
LogRequest(request);
return base.SendAsync(request, cancellationToken).ContinueWith((task) =>
{
HttpResponseMessage response = task.Result;
LogResponse(response);
return response;
});
}
LogResponse:
private void LogResponse(HttpResponseMessage response)
{
ApiResponse info = new ApiResponse();
//Populate response obj
if (response.Content != null)
{
response.Content.ReadAsStringAsync().ContinueWith((task) =>
{
info.Content = task.Result;
}
);
}
_repository.LogResponse(info);
}
コンテンツをリポジトリのデータベースに挿入しようとすると、null例外が発生します。しかし、コンテンツオブジェクトにステップスルーすると、応答が入力されます。リクエストが完了する前にデータをDBに挿入しようとしていると思います。
非同期リクエストを使用する目的が損なわれるため、待ちたくありません。リクエストが完了したときに、logresponseメソッドを実行するためにどのように接続できますか?私はcontinueWithがこれを処理し、タスクが完了したときにアクションを実行すると思いました(これは、リクエストのダウンロードが必ずしも終了していないことを意味しますか?)。
何か案は?