【问题标题】:Large property always null on post大型属性在发布时始终为空
【发布时间】:2018-07-29 22:14:08
【问题描述】:

我正在向 webapi 方法发布一个对象。对象看起来像这样

public class SendRequest
{
    public string APIKey { get; set; }
    public string Message { get; set; }
}

我有一个例子,我的信息非常大(27mb)。 在发布时它始终为空。

注意 - 我的 SendRequest 不为空,但我的 Message 属性为空。 在类似的文章之后,我这样配置了我的 web.config

<httpRuntime 
    targetFramework="4.5.1" 
    maxRequestLength="2147483647" 
    requestValidationMode="4.0" 
    executionTimeout="110" />

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2147483648" />
  </requestFiltering>
</security>

但我还是没有赢。

疯狂的是,它只是一个为空的属性(APIKey 被正确传递)所以它不能被 IIS 阻止它可以吗?

我只是在反序列化方面失败了吗?

【问题讨论】:

  • 如果一个属性发送而另一个不发送,您可能无法反序列化

标签: c# json asp.net-web-api asp.net-mvc-5


【解决方案1】:

可能是一个愚蠢的问题 - 但您是否使用 multipart/form-data 内容类型标头发送/发布您的内容?

我注意到在进行MVC文件上传时,即使是小文件也会上传失败,因为客户端需要将表单发布标记为多部分表单。

【讨论】:

  • 计划文本。应用程序/json
  • 我不完全确定 - 但我过去曾发生过 Newtonsoft.Json 无法反序列化大文件的异常。在演示项目中尝试一下——你能加载 27 mb 的文件并反序列化它吗?也许您的问题是由于文件的大小以及它一旦到达就无法反序列化,这与它最初不发送的实际想法相反。
【解决方案2】:

我发现了这个:

            <webServices>
                <jsonSerialization maxJsonLength="50000000"/>
            </webServices>

这里

Can I set an unlimited length for maxJsonLength in web.config?

如果您将其作为 application/json 编码/内容类型发送 - 那么可以想象您的 web.config 需要增加其 maxJsonLength 以适应您巨大的 json 文件。 在这种情况下,它可能与请求大小无关,而是与最大 json 长度有关。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多