我有一个MVC API控制器,具有以下操作.
我不明白如何阅读消息的实际数据/正文?
[HttpPost]
public void Confirmation(HttpRequestMessage request)
{
var content = request.Content;
}
Run Code Online (Sandbox Code Playgroud) 在Controller中的Action中尝试对象时,偶尔似乎是null.我发现,这是由于ReadAsStringAsync()在SendAsync()的覆盖DelegatingHandler.问题在于内容.当我的客户端发送一个内容正文并在记录器中读取它时,它永远不会被Controller Action Invoker读取(或者可能在某个地方JsonFormatter).我怀疑后续调用Content.ReadAsStringAsync()不会抛出异常,但也不会返回预期的内容体(返回一些信息表明异步读取已完成).
但是我的问题仍然存在,因为我想[FromBody]在一个动作中读取一个参数,当它Content.ReadStringAsync获得RaceCondition的时候它是null 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;
});
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人有解决这个问题的线索?