#angular #azure #.net-core
#angular #azure #.net-core
Вопрос:
Наше Dot Net Core 5 размещено в веб-приложении Linux Azure, которое содержит веб-приложения angular 12.
this.router.navigate([]).then((result) => {
window.open('/flight/flight-book?flightdata=' encodeURIComponent(this.encryptData(hiddenvalue)), '_blank');
});
Теперь приведенный выше код запускается в браузере с ошибкой — ОШИБКА HTTP 414 — URL слишком длинный, но работает на локальном хосте, он работает нормально.
Мы считаем, что веб-приложение Azure останавливает отображение этого URL-адреса в браузере. Даже в web.config мы упоминаем приведенный ниже код, но он все еще не работает.
<system.webServer>
<!-- Here you have other settings related to handlers.-->
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="10485760" maxUrl="1000241" maxQueryString="3002768" />
</requestFiltering>
</security>
</system.webServer>
Комментарии:
1. Какова фактическая длина URL-адреса, сгенерированного с использованием выражения
'/flight/flight-book?flightdata=' encodeURIComponent(this.encryptData(hiddenvalue))
, вызывающего414
ошибку?2. Да, длина представляет собой длинную зашифрованную строку, но при запуске на локальном хосте все хорошо, только после развертывания в веб-приложении Azure получение HTTP 414.
Ответ №1:
Службы приложений Azure для Linux выполняются в контейнере, поэтому, если вы отправляете HTTP-запрос в свою службу приложений, он сначала обрабатывается обратным прокси-сервером в Azure вне вашего контроля, а затем запрос пересылается вашему приложению в контейнере. Ваш web.config не влияет на обратный прокси-сервер, и это компонент, который будет применять ограничение URL. Я только что протестировал его, и кажется, что максимальная длина запроса, которая все еще принимается в службах приложений Linux, составляет 8192 символа.
В службах приложений Windows по умолчанию ограничение составляет 2048 символов, но здесь вы можете управлять сервером напрямую и web.config
так далее…
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<httpRuntime maxUrlLength="32768" maxQueryStringLength="32768" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="32768" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
…установит максимальную длину URL-адреса в 32768 символов.
При этом, как вы только что испытали, иногда браузеры и серверы определяют ограничения URL или строки запроса, которые вы не всегда можете контролировать — лучше переместить более длинные данные в тело HTTP.
Ответ №2:
Я решил это с помощью localStorage API, наконец, я могу работать с длинным текстовым значением для нескольких страниц в приложении.
localStorage.setItem("flightinfo", JSON.stringify(this.countries));//set value
localStorage.getItem('flightinfo' paramGuid);//get value
У меня все работает, спасибо.