带有 JSON 数据的大型 POST 请求在 ASP.NET Core 4.6.1 中未反序列化

Posted

技术标签:

【中文标题】带有 JSON 数据的大型 POST 请求在 ASP.NET Core 4.6.1 中未反序列化【英文标题】:Large POST requests with JSON data are not deserialized in ASP.NET Core 4.6.1 【发布时间】:2019-09-17 20:07:54 【问题描述】:

我有一个 web api:

[Route("api/MyResource")]
public IHttpActionResult Post([FromBody] MyDTO myResource, int resourceId)

其中 MyDTO 包含很多其他 DTO 数组。

当我发送较小的请求时,一切正常,但是在 MyDTO 的数组中有数千个对象(cca 5 MB)时,myResource 为空。

我也尝试将 myResource 参数的类型更改为object,但得到了相同的结果。较小的请求被反序列化为JObject,大的被反序列化为空。我在输出窗口中没有异常或错误 http 响应。

我正在 IIS-Express 中调试应用程序。

为什么我会得到 null 以及如何解决它?

【问题讨论】:

您似乎对允许的最大请求大小有限制,如果存在,请尝试查看 web.config。 能否检查ModelState对象中的异常项,看看有没有异常?如果有,它们是什么? Liero,您尝试设置 maxAllowedContentLength 吗? 【参考方案1】:

您可以在 web.config 中更新maxAllowedContentLength

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="52428800" />
  </requestFiltering>
</security>

如果不成功也设置

<system.web>
  <httpRuntime maxRequestLength="65536" />
</system.web>

【讨论】:

以上是关于带有 JSON 数据的大型 POST 请求在 ASP.NET Core 4.6.1 中未反序列化的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中发送带有 json 对象数据的 post 请求

发送带有包含列表的 json 数据的 post 请求

使用 Volley 发送带有 JSON 数据的 POST 请求

带有 JSON 正文的 POST 请求

带有标头和原始 json 正文的 Volley POST 请求

java 怎么获取post 中的json参数