2017-02-15 21 views
0

У меня есть asp.net core web api, который позволяет tts-запросы. Вы в основном запрашиваете http://server.url/Whatever you want it to say.mp3, чтобы получить mp3 с текстом, произнесенным в tts.Увеличьте максимальную длину url в ядре asp.net

Но проблема в том, что он вернет 400 - The request URL is invalid, если я передам ему длинную строку. Похоже, что сервер нажимает какое-то максимальное ограничение длины URL. Я могу найти информацию о том, как исправить это «классический» asp.net web.config, но не как исправить это в ядре asp.net.

Каков правильный способ увеличения максимальной длины URL-адреса в ядре asp.net?

Update:

точный адрес является, например:

http://localhost:5000/api/mp3/nl-NL/male/1/Wikipedia%20is%20een%20online%20encyclopedie%20die%20tracht%20inhoud%20te%20bieden%20die%20vrij%20herbruikbaar,%20objectief%20en%20verifieerbaar%20is.%20Het%20project%20is%20gebouwd%20op%20vijf%20zuilen.%20De%20Nederlandstalige%20versie%20startte%20op%2019%20juni%202001%20en%20is,%20gemeten%20naar%20het%20aantal%20artikelen,%20met%20bijna%201,9%20miljoen%20artikelen%20de%20op%20vier%20na%20grootste%20taalversie.mp3

Это URL-закодирован. Я постараюсь выяснить, что такое точный максимум.

Я не могу использовать POST, поскольку инструмент, который будет использовать это, поддерживает только URL-адреса для mp3-файлов (отсюда расширение .mp3, используемое в моем контроллере).

Update 2

Самый длинный запрос он принимает имеет 397 символов, которые не кажутся очень логичным. Если добавить еще один, он будет возвращать код 400.

Update 3

Оказывается только этот вопрос, когда развернут на сервере (с помощью IIS), при запуске локально, он поддерживает путь более длинные строки (я еще не видел, чтобы он возвращал код 400). Мне нужно будет изучить IIS, чтобы понять, где это происходит.

+0

Каков точный URL-адрес, который вы используете? – koelkastfilosoof

+0

Вы можете использовать POST вместо GET. – juunas

+0

насколько велики (mancy characters), когда он падает? вы пытались url_encoding ваш url (пробелы => '% 20' или' + ')? –

ответ

2

Как оказалось, мне нужно две вещи, чтобы исправить это:

Изменить web.config

мне нужно добавить следующий код в web.config проинструктировать IIS, чтобы более длинные URL-адреса:

<system.webServer> 
    <security> 
     <requestFiltering allowDoubleEscaping="false"> 
      <requestLimits maxAllowedContentLength="30000000" maxUrl="40960" maxQueryString="20480" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 

Редактировать реестр

После этого будет IIS все еще бросать код 400, потому что длина UrlSegment слишком длинная. К сожалению, единственный способ изменить это - это небольшой хакер реестра.

Перейдите к HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters и найдите ключ UrlSegmentMaxLength. Если его нет, создайте его со значением типа REG_DWORD. Я использовал значение 1000 HEX (4096 DEC). Значение по умолчанию - 260, если ключ еще не установлен.

Прежде чем изменение вступило в силу, мне нужно было перезагрузить сервер.