簡體   English   中英

將大型JSON對象發布到ASP.NET MVC

[英]Posting a large JSON object to ASP.NET MVC

我正在使用KnockoutJS的映射插件將我的模型轉換為Knockout對象。 但是我在將大型json對象發送回服務器時遇到問題。 我的ajax調用看起來像這樣:

$.ajax({
    url: "/home/DoStuff",
    type: "POST",
    data: JSON.stringify({ deal: ko.toJS(myObjectViewModel) }),
    contentType: "application/json",
    dataType: "json",
    success: function (result) {
        console.log(result);
    },
    error: function (xhr, status, message) {
        console.log(xhr);
    }
});

執行此腳本永遠不會命中控制器中的DoStuff操作。 當我用Firebug檢查時,POST就會繼續旋轉。 在Firebug的Net選項卡中,它表示Post Body為159.9 KB,Total Sent為165.1 KB(包括標題)。 如果它被發送,為什么它沒有在代碼中擊中我的斷點?

但是,當我只發送myObjectViewModel的屬性時,它會發布很好,一切都很成功。 因此,我認為問題在於發布的數據大小。 所以我嘗試增加maxJsonLength。

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483644"></jsonSerialization>
        </webServices>
    </scripting>
</system.web.extensions>

這沒有用。

還有什么我應該做的嗎?

我想我的對象超過了允許ASP.NET反序列化的最大成員數。 我添加了以下內容以增加它並且它可以工作。

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

更新:所以還有更多的東西,因為在我開始工作之后,最終它將停止工作似乎沒有理由。 Firebug會再次顯示帖子剛剛旋轉而沒有擊中后端的代碼。 只有在我關閉Firefox,殺死IIS Express進程並關閉Visual Studio之后,帖子才開始重新開始工作。 但關閉VS似乎是關鍵。 在我再次使用它之后,更改代碼並重新運行應用程序會使問題重新出現。 出現問題時,即使是硬刷新也不會加載頁面。 它只會坐在那里旋轉。 該頁面將僅在我終止IIS Express進程並從VS重新運行后重新加載。

所以我轉儲了IIS Express並在我的機器上使用了完整的IIS。 看起來這樣可以解決問題。 即使在更改代碼和重新編譯之后,每次都會發布大型json數據。

IIS Express似乎可以處理少量的json,但在更大的集合上會出現窒息。 我沒有經過足夠的測試,100%確認這一點,但我知道完整的IIS性能更可靠。 雖然沒有測試VS的內部Web服務器。

環境:Windows 8,Visual Studio 2012 Update 3

您可能需要提高通用最大請求長度 (以千字節為單位,例如1GB)

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="1048576" />
  </system.web>
</configuration>

如果您使用的是IIS 7,可能會出現最大內容長度 (以字節為單位,例如1GB)

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

我正在向我的控制器傳遞包含近1,50,00,000個字符的大型JSON數據,並在web.config中進行以下更改:

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="2147483644" />
</appSettings>

這對我很有幫助.....

我有同樣的問題從客戶端向服務器控制器操作發布大型模型對象數據(JSON)。 添加以下設置配置工作正常。 謝謝。

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

暫無
暫無

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

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