Решение: длина строки превышает значение, установленное в свойстве maxJsonLength для действия POST - PullRequest
0 голосов
/ 08 октября 2018

У меня следующий код в MVC.В моем POST-действии params будет много данных.Итак, я изменил web.config соответственно, но я получаю ОШИБКА .Фактическая проблема в том, что контроллер даже не срабатывает при вызове POST.

I tried Following ways

  1. Переопределить JsonResult
  2. с последующим Ссылка .Здесь я не мог видеть данные, которые отправляются из скрипта.Я получаю NULL в base64.

controller.cs

 [System.Web.Mvc.HttpPost]
    public bool postImage(string base64)
    {
       return true;
    }

web.config

 <system.web.extensions>
<scripting>
  <webServices>
    <jsonSerialization maxJsonLength="2147483644"/>
  </webServices>
</scripting>

JavaScript

  $.ajax({
  type: "POST",
  url: 'http://localhost:21923/communities/postImage?base64=',
  contentType: "application/json; charset=utf-8",
  data: JSON.stringify(data),
  dataType: "json",
  success: function(data) {
    document.getElementById('test').click();
  },
  error: function(a, b, c) {
    console.log(a);
  }
})

Ошибка

Ошибкаво время сериализации или десериализации с использованием JSON JavaScriptSerializer.Длина строки превышает значение, установленное в свойстве maxJsonLength. \ R \ nИмя параметра: input

1 Ответ

0 голосов
/ 09 октября 2018

Создайте JsonDotNetValueProviderFactory.cs и напишите следующий код:

public sealed class JsonDotNetValueProviderFactory : ValueProviderFactory
{
  public override IValueProvider GetValueProvider(ControllerContext controllerContext)
 {
    if (controllerContext == null)
        throw new ArgumentNullException("controllerContext");

    if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
        return null;

    var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream);
    var bodyText = reader.ReadToEnd();

    return String.IsNullOrEmpty(bodyText) ? null : new DictionaryValueProvider<object>(JsonConvert.DeserializeObject<ExpandoObject>(bodyText, new ExpandoObjectConverter()) , CultureInfo.CurrentCulture);
 }
}

и добавьте следующие две строки в Global.asax.cs in Application_Start()

        ValueProviderFactories.Factories.Remove(ValueProviderFactories.Factories.OfType<JsonValueProviderFactory>().FirstOrDefault());
        ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory());

Источник: Ссылка

Благодаря Дарину Димитрову !!

Если приведенный выше код не работает: следуйте Это может очень помочь

Благодаря dkinchen !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...