Длинная строка в массиве JSON вызывает неверный запрос в. NET core web api - PullRequest
0 голосов
/ 09 апреля 2020

Я отправляю массив из приложения JavaScript (с использованием API выборки), который содержит очень длинную строку, подобную этой, в. NET Core Web API:

"FirstName LastName (Country)
 TEXT
    INFORMATION:  ^MOM?ROVAL LETTER REQUIRED.
    INFORMATION: MORE TEXT HERE
    .... around 20 more lines
"

текст может содержать диапазон символов, включая разрывы строк и т. д. c (я думаю, что некоторые символы кодируются CR и LF символами). Это вызывает 400 неверный запрос, когда я отправляю его в. NET Core Web API. Если я изменю текст на что-то вроде "test", тогда он будет работать.

Есть ли простой способ отформатировать текст так, чтобы его принимал Web API?

1 Ответ

0 голосов
/ 10 апреля 2020

Если вы получаете 400 Bad Request с ≈25 строками относительно коротких строк, то наиболее вероятное объяснение состоит в том, что ваш JavaScript отправляет эти данные с помощью GET запроса, таким образом нажимая пределы длины строки запроса.

Хотя стандарт HTTP на самом деле не определяет ограничение длины запроса , большинство серверов имеют ограничения по умолчанию для различных методов.

Для Inte rnet Информационный сервер (IIS), например, это:

  • URL: 4096 байт (4 КБ)
  • Строка запроса (GET) : 2048 байт (2 КБ)
  • Контент (POST): 30 000 000 байт (≈28,6 МБ)

Если вы оказались хостингом Ваше ASP. NET Базовое приложение на IIS, и у вас установлена ​​функция Фильтрация запросов ( инструкции ), эти ограничения можно изменить в файле web.config ( ссылка ):

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <requestLimits maxUrl="2048" maxQueryString="1024" />
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>

Примечание: Возможно, также необходимо изменить это значение в реестре .

Тем не менее, предпочтительное решение *1049* состоит в том, чтобы изменить способ отправки этих данных. Как вы можете видеть, вы можете POST почти 30 МБ данных без изменения конфигурации по умолчанию, что, я думаю, будет более чем достаточно для ваших нужд.

Очевидно, что для этого необходимо изменить оба JavaScript (на использовать метод HTTP POST) и, возможно, ваше ASP. NET базовое приложение (чтобы оно принимало [HttpPost] запрос).

Примечание: Примечание Точные ограничения зависят от программного обеспечения веб-сервера. Но они, как правило, в пределах этого приблизительного.

...