大型属性在发布时始终为空

Posted

技术标签:

【中文标题】大型属性在发布时始终为空【英文标题】: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 阻止它可以吗?

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

【问题讨论】:

如果一个属性发送而另一个不发送,您可能无法反序列化 【参考方案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 长度有关。

【讨论】:

以上是关于大型属性在发布时始终为空的主要内容,如果未能解决你的问题,请参考以下文章

MVVM WPF:为啥在运行应用程序时更新文本框中的文本后模型中的属性始终为空?

Asp.net 核心导航属性始终为空

blob 流长度属性值始终为 -1,无论文件是不是为空

phonegap 安卓地理定位。某些属性始终为空

lastmessageID 始终为空,除了我

播种 EF 4.1 时代理的第一个导航属性为空