我正在尝试记录对 API 的请求和响应。我目前正在使用一个 delegatingHandler 来捕获 httpwebresponses 和 httpwebrequests。
处理程序:
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;
});
}
日志响应:
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);
}
当我尝试将内容插入到我的存储库中的数据库时,我得到一个空异常。但是当我单步执行内容对象时,它会填充响应。我想我正在尝试在请求完成之前将数据插入数据库。
我不想等待它,因为这违背了使用异步请求的目的,当请求完成时,我如何连接它以运行 logresponse 方法?我认为 continueWith 会解决这个问题并在任务完成时运行该操作(这是否意味着请求的下载不一定完成?)。
有任何想法吗?