Asp.net

對 maxJsonLength 預設值的混淆

  • August 24, 2016

我希望對 maxJsonLength 屬性進行一些澄清。這是一些背景資訊。

我在使用 jQuery 的 .NET Web 應用程序中未返回 AJAX 響應時遇到問題。當使用者更改下拉列表時,我手動建構並顯示了一些 HTML。問題是一個特定的選擇返回了一個大約 140kB 的字元串,但它不會顯示在瀏覽器中。我將問題縮小到字元串的長度太長。在搜尋 SO 和其他地方時,我發現可以通過在我的 web.config 中手動設置 maxJsonLength 的值來解決該問題。

我的困惑是關於 maxJsonLength 屬性的預設值。一些答案說它是 2097152 個字元並參考這個 MSDN 連結。但其他人說預設長度是 102400 並參考這個其他 MSDN 連結。在我的測試中,我得出的結論是預設值為 102400 字節,但我不確定其他預設值的原因。

MaxJsonLength根據JavaScriptSerializer創建方式的不同,有兩個預設值。

2 097 152

這是2097152直接創建序列化程序的時候。相關程式碼為:

public class JavaScriptSerializer {
   ...
   internal const int DefaultMaxJsonLength = 2097152;        
   ...
   public JavaScriptSerializer(...) {
       ...
       MaxJsonLength = DefaultMaxJsonLength;
   }
}

102 400

它是 102400由 ASP.NET MVC(或更早版本)創建序列化程序的時候。相關程式碼為:

public sealed class ScriptingJsonSerializationSection : ConfigurationSection {
   ...
   private static readonly ConfigurationProperty _propMaxJsonLength =
       new ConfigurationProperty("maxJsonLength",
                                   typeof(int),
                                   102400,
                                   ...);
   ...
   [ConfigurationProperty("maxJsonLength", DefaultValue = 102400)]
   public int MaxJsonLength { ... }
   ...
}

有幾個地方分配serializer.MaxJsonLength了這個值——它們都在與 ASP.NET 相關的程式碼中。

引用自:https://stackoverflow.com/questions/2119186