当尝试在控制器中的操作中处理对象时,它偶尔似乎为空。我发现这ReadAsStringAsync()
是SendAsync()
由于DelegatingHandler
. 问题在于内容。当我的客户端发送内容主体并在记录器中读取它时,Controller Action Invoker 永远不会读取它(或者可能在JsonFormatter
. 我怀疑后续调用Content.ReadAsStringAsync()
不会引发异常,但也不会返回预期的内容主体(返回一些信息,说明异步读取已完成)。
但是我的问题仍然存在,因为我想读取[FromBody]
动作中的参数,并且当 RaceConditionContent.ReadStringAsync
被DelegatingHandler
. 但是,当JsonFormatter
赢得它时,我得到了对象,但这很少见(仅在服务启动时)。
这是我的DelegatingHandler
代码:
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;
});
}
}
有没有人知道这个问题的解决方案?