对于大型JSON请求,Web API POST参数为null

时间:2016-12-22 02:44:41

标签: c# json post asp.net-web-api2

我在Web API控制器中有一个POST方法,它接受一个包含50个字段作为参数的类。我在控制器中将参数值设置为null,但如果我将字段数减少到30左右,我就会得到正确的值。

我已将此添加到Web.Config:

  

add key =" aspnet:MaxJsonDeserializerMembers"值=" 140000"

如果我使用Request.Content.ReadAsStreamAsync(),请使用 要对流进行反序列化的JsonSerializer,我将获得具有正确值的对象。

这是读取POST参数的首选方式吗?

3 个答案:

答案 0 :(得分:11)

在web.config中设置httpRuntime值

<httpRuntime maxRequestLength="50000"></httpRuntime>

最大请求大小(以KB为单位)。默认大小为4096 KB(4 MB)。

答案 1 :(得分:0)

.NET Web Api项目(.NET Framework)必须要做四件事:

1。在web.config中添加:

<system.webServer>
  <security>
      <requestFiltering>
          <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
  </security>

2。还要添加到web.config:

<system.web>
<httpRuntime targetFramework="4.7.1" maxRequestLength="2147483647" />

3。大型请求需要64位: 在Web Api项目属性中,在IIS Express中本地运行时,将位数设置为64: enter image description here 发布后,请确保应用程序池支持64位。

4。我们注意到请求长时间占用了内存: 让您的api控制器实现基本的api控制器。在该基本api控制器中,重写dispose方法并处理垃圾:

protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);

        GC.Collect();
    }

我不建议强制进行垃圾收集。您应该使用内置诊断程序的视觉工作室在问题发生之前和之后进行快照,然后比较内存以查看是什么使它吃光了。

答案 2 :(得分:-4)

请为您的所有参数创建属性,并将post方法作为类对象传递给它。 恩。

public class clsProperty{
public param1 {get;set;}
public param2 {get;set;}
}

[httpPost] public void postmethod([frombody] clsProperty)