大型属性在发布时始终为空
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 长度有关。
【讨论】:
以上是关于大型属性在发布时始终为空的主要内容,如果未能解决你的问题,请参考以下文章