MVC 5增加POST请求中的最大JSON长度

问题描述 投票:3回答:2

我正在向一个MVC控制器发送一个POST请求,其中包含大量的JSON数据,它正在抛出以下内容:

ArgumentException:使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性上设置的值。参数名称:输入

为了解决这个问题,我尝试了许多Web.Config解决方案。即:

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

...

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

现在,我正在与之通信的控制器位于其自己的区域中,具有自己的Web.Config。我已尝试将上述内容放在根目录或区域的Web.Config中,但两者都不起作用。当我在同一个控制器中调试另一个方法时,我得到了默认的JSON Max Length,其中包含以下内容:

Console.WriteLine(new ScriptingJsonSerializationSection().MaxJsonLength);
// 102400

这是我想要POST的方法:

[HttpPost]
public JsonResult MyMethod (string data = "") { //... }

如何增加MVC控制器的Max JSON长度,以便我的请求可以成功到达方法?

编辑:添加<httpRuntime maxRequestLength="2147483647" />

c# json asp.net-mvc-5
2个回答
10
投票

因此,虽然这是一个相当令人不愉快的解决方案,但我通过手动读取请求流来解决问题,而不是依赖于MVC的模型绑定器。

例如,我的方法

[HttpPost]
public JsonResult MyMethod (string data = "") { //... }

成为

[HttpPost]
public JsonResult MyMethod () {
    Stream req = Request.InputStream;
    req.Seek(0, System.IO.SeekOrigin.Begin);
    string json = new StreamReader(req).ReadToEnd();
    MyModel model = JsonConvert.DeserializeObject<MyModel>(json);
    // use model...
}

这样我可以使用JSON.NET并使用MVC的默认解串器来绕过JSON最大长度限制。

为了适应这个解决方案,我建议创建一个自定义的JsonResult工厂,它将取代Application_Start()中的旧工厂。


0
投票
<system.web>
    <httpRuntime  maxRequestLength="1048576" />  
</system.web>

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>
</system.webServer>
© www.soinside.com 2019 - 2024. All rights reserved.