Giới thiệu:JsonMaxLength ngoại lệ trên deserializing json lớn các đối tượng
ứng dụng Web, ASP.NET MVC 3, một hành động điều khiển chấp nhận một thể hiện của lớp mô hình POCO với (khả năng) lĩnh vực lớn.
lớpmẫu:
public class View
{
[Required]
[RegularExpression(...)]
public object name { get; set; }
public object details { get; set; }
public object content { get; set; } // the problem field
}
điều khiển hành động:
[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
}
Vấn đề:
Một hành động nên có thể chấp nhận đối tượng JSON lớn (ít nhất lên đến hàng trăm MB trong một yêu cầu duy nhất và đó không phải là trò đùa). Theo mặc định, tôi đã gặp một số hạn chế như httpRuntime maxRequestLength
v.v. - tất cả được giải quyết trừ MaxJsonLengh - có nghĩa là ValueProviderFactory mặc định cho JSON không có khả năng xử lý các đối tượng đó.
Cố gắng:
Thiết
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647"/>
</webServices>
</scripting>
</system.web.extensions>
- không giúp.
Tạo tùy chỉnh của riêng tôi ValueProviderFactory như mô tả trong @ Darin của câu trả lời ở đây:
JsonValueProviderFactory throws "request too large"
- cũng thất bại vì tôi không có khả năng sử dụng JSON.Net (vì lý do phi kỹ thuật) . Tôi đã cố gắng thực hiện chính xác deserialization ở đây bản thân mình nhưng dường như nó là một chút trên kiến thức của tôi (chưa). Tôi đã có thể deserialize chuỗi JSON của tôi để
Dictionary<String,Object>
ở đây, nhưng đó không phải là những gì tôi muốn - Tôi muốn deserialize nó để các đối tượng POCO đáng yêu của tôi và sử dụng chúng như là tham số đầu vào cho hành động.
Vì vậy, các câu hỏi:
- Bất cứ ai biết cách nào tốt hơn để vượt qua những vấn đề mà không thực hiện tùy chỉnh phổ ValueProviderFactory?
- Có khả năng xác định bộ điều khiển và hành động cụ thể nào tôi muốn sử dụng ValueProviderFactory tùy chỉnh của mình không? Nếu tôi biết hành động trước hơn tôi sẽ có thể deserialize JSON để POCO mà không cần mã hóa nhiều trong ValueProviderFactory ...
- Tôi cũng đang suy nghĩ về việc triển khai ActionFilter tùy chỉnh cho vấn đề cụ thể đó, nhưng tôi nghĩ nó hơi xấu xí.
Bất kỳ ai cũng có thể đề xuất giải pháp tốt?
Có rất nhiều người đang làm việc về chủ đề này và đây là giải pháp duy nhất tôi có thể tìm thấy đã hoạt động trong Ứng dụng MVC4 của mình. Cảm ơn bạn! – stitz
Siêu! Hoạt động tuyệt vời để Ràng buộc đối tượng Json lớn. Đối với các yêu cầu GET với đối tượng Json lớn, tôi đang sử dụng lớp ở đây: http://brianreiter.org/2011/01/03/custom-jsonresult-class-for-asp-net-mvc-to-avoid-maxjsonlength-exceeded -exception/ –
Nếu bạn gặp sự cố khi đăng cấu trúc Json lớn qua bài đăng ajax lên Bộ điều khiển MVC4, hãy thử điều này trước bất kỳ nội dung nào khác. Cố gắng rất nhiều aproaches khác không có may mắn và điều này một mình đã lưu trong tuần của tôi. Cảm ơn rất nhiều @DarinDimitrov! –