簡體   English   中英

對於大型JSON請求,Web API POST參數為null

[英]Web API POST parameter is null for large JSON request

我在Web API控制器中有一個POST方法,它接受一個包含50個字段的類作為參數。 我在控制器中獲取參數值為null ,但如果我將字段數減少到30左右,我得到的值正確。

我將此添加到Web.Config:

add key =“aspnet:MaxJsonDeserializerMembers”value =“140000”

如果我使用Request.Content.ReadAsStreamAsync() ,並使用JsonSerializer反序列化流,我得到的對象具有正確的值。

這是讀取POST參數的首選方式嗎?

在web.config中的system.web部分下設置httpRuntime

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

最大請求大小(以KB為單位)。 默認大小為4096 KB(4 MB)。

我們必須為.NET Web Api項目(.NET Framework)做4件事:

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: 在此輸入圖像描述 發布時,請確保應用程序池支持64位。

4.我們注意到長時間占用內存的請求:讓api控制器實現基本api控制器。 在那個基礎api控制器覆蓋dispose方法並處理垃圾:

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

        GC.Collect();
    }

我不建議強制垃圾收集。 您應該使用內置診斷功能的視覺工作室在問題出現之前和之后拍攝快照,然后比較內存以查看它正在吃什么。

請為所有參數創建屬性,並將post方法作為類對象傳遞給post方法。 恩。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM