【发布时间】:2012-04-14 04:23:36
【问题描述】:
简介:
Web 应用程序,ASP.NET MVC 3,一个控制器操作,它接受具有(可能)大字段的 POCO 模型类的实例。
模型类:
public class View
{
[Required]
[RegularExpression(...)]
public object name { get; set; }
public object details { get; set; }
public object content { get; set; } // the problem field
}
控制器动作:
[ActionName(...)]
[Authorize(...)]
[HttpPost]
public ActionResult CreateView(View view)
{
if (!ModelState.IsValid) { return /*some ActionResult here*/;}
... //do other stuff, create object in db etc. return valid result
}
问题:
一个动作应该能够接受大型 JSON 对象(在单个请求中至少达到数百兆字节,这不是开玩笑)。默认情况下,我遇到了一些限制,例如 httpRuntime maxRequestLength 等 - 除了 MaxJsonLengh 之外,所有限制都已解决 - 这意味着 JSON 的默认 ValueProviderFactory 无法处理此类对象。
试过了:
设置
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647"/>
</webServices>
</scripting>
</system.web.extensions>
- 没有帮助。
创建我自己的自定义 ValueProviderFactory,如@Darin 的回答中所述:
JsonValueProviderFactory throws "request too large"
- 也失败了,因为我无法使用 JSON.Net(由于非技术原因)。我试图自己在这里实现正确的反序列化,但显然它有点超出我的知识(还)。我可以在这里将我的 JSON 字符串反序列化为
Dictionary<String,Object>,但这不是我想要的 - 我想将它反序列化为我可爱的 POCO 对象并将它们用作操作的输入参数。
那么问题来了:
- 有谁知道在不实现通用自定义 ValueProviderFactory 的情况下解决该问题的更好方法?
- 是否可以指定我想使用我的自定义 ValueProviderFactory 的特定控制器和操作?如果我事先知道该操作,我将能够将 JSON 反序列化为 POCO,而无需在 ValueProviderFactory 中进行大量编码...
- 我也在考虑针对该特定问题实现自定义 ActionFilter,但我认为它有点难看。
谁能提出一个好的解决方案?
【问题讨论】:
标签: c# asp.net-mvc json asp.net-mvc-3