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,但我認爲它有點難看。
任何人都可以提出一個好的解決方案?
有很多人關於這個主題的任務,這是我能找到的唯一解決方案,在我的MVC4應用程序工作。謝謝! – stitz 2013-02-23 11:41:14
超級!適用於綁定大型Json對象。對於具有大型Json對象的GET請求,我在此處使用該類:http://brianreiter.org/2011/01/03/custom-jsonresult-class-for-asp-net-mvc-to-avoid-maxjsonlength-exceeded -exception/ – 2013-03-20 10:28:00
如果您無法在MVC4控制器上發佈ajax文章發佈大型Json結構時遇到問題,請在任何其他內容之前嘗試執行此操作。試了很多其他的竅門,沒有運氣,這一個人節省了我的一週。非常感謝@DarinDimitrov! – 2014-02-17 13:04:22