Исключение JsonMaxLength при десериализации больших объектов json

Введение:

Веб-приложение, 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 — это означает, что ValueProviderFactory по умолчанию для JSON не может обрабатывать такие объекты.

Пробовал:

Установка

  
    
      
        
      
    
  
  • не помогает.

Создание собственного пользовательского ValueProviderFactory, как описано в ответе @Darin здесь:

JsonValueProviderFactory выдает «слишком большой запрос»

  • также не удалось, поскольку у меня нет возможности использовать JSON.Net (по нетехническим причинам). Я пытался реализовать правильную десериализацию здесь сам, но, видимо, это немного выше моих знаний (пока). Я смог десериализовать свою строку JSON в Dictionaryздесь, но это не то, что мне нужно — я хочу десериализовать ее в мои прекрасные объекты POCO и использовать их в качестве входных параметров для действий.

Итак, вопросы:

  1. Кто-нибудь знает лучший способ решить проблему без реализации универсального пользовательского ValueProviderFactory?
  2. Есть ли возможность указать, для какого конкретного контроллера и действия я хочу использовать свою собственную ValueProviderFactory? Если я заранее узнаю действие, то смогу десериализовать JSON в POCO без большого количества кода в ValueProviderFactory...
  3. Я также подумываю реализовать собственный ActionFilter для этой конкретной проблемы, но я думаю, что это немного некрасиво.

Кто-нибудь может предложить хорошее решение?

28
задан Community 23 May 2017 в 11:54
поделиться