首页 > 解决方案 > 使 web api 控制器读取内容而不是使用lazystreamcontent

问题描述

我在 Web API 控制器中有以下方法:

[HttpPost]
[Route("api/Logs")]
public async Task<IHttpActionResult> AddLogsAsync([FromBody] List<Log> logList)
{
    if (logList.Count > 0)
    {
        using (var database = new DatabaseContextHandler())
        {
            await database.AddLogsAsync(logList);
        }
    }
    return Ok();
}

它通常可以工作,直到我尝试向logList它发送一个 6.7 MB JSON 并得到一个NullReferenceExceptionon (logList.Count > 0),这显然意味着logListis null。在确认我的 JSON 格式正确后,我重新发送了相同的 JSON,这次是在调试 API 时,看到它不仅logListnull,而且Request.Content显示为LazyStreamContent,我认为这是控制器如何处理较大的内容体。

我可以调用ReadAsStringAsync(),然后在方法中对其进行反序列化,但这意味着我必须对每个控制器进行此更改,以避免以后在其他地方出现此问题。

所以我的问题是,有没有办法阻止控制器使用LazyStreamContent?让它总是在进入方法之前完全读取请求?我尝试深入研究文档,但找不到任何似乎可以执行此类操作的配置。

标签: c#asp.netasp.net-web-apiasp.net-web-api2

解决方案


推荐阅读