gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:21:42 31 4
gpt4 key购买 nike

我正在向主体中包含大量 JSON 数据的 MVC Controller 发送 POST 请求,它抛出以下内容:

ArgumentException: Error during serialization or deserialization usingthe JSON JavaScriptSerializer. The length of the string exceedsthe value set on the maxJsonLength property.Parameter name: input

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

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

...

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

现在,我正在与之通信的 Controller 在它自己的区域中,有它自己的 Web.Config。我已经尝试将上面的内容分别放在根目录或区域的 Web.Config 中,但都没有用。当我在同一个 Controller 中调试不同的方法时,我得到了默认的 JSON 最大长度,如下所示:

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

这里是我想要发布的方法:

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

如何增加 MVC Controller 的最大 JSON 长度,以便我的请求能够成功到达该方法?

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

最佳答案

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

比如我的方法

[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() 中的旧工厂。

关于c# - MVC 5 增加 POST 请求中的最大 JSON 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167770/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com