Вам необходимо закодировать параметр запроса, поскольку он не содержит символов, безопасных для параметров запроса:
let url = "/localhost/Proxy.ashx?url=" + encodeURIComponent(dest_url);
Для дальнейшего объяснения давайте представим, что мы анализатор URL. Без кодировки вы увидите эту строку:
/localhost/Proxy.ashx?url=https://www.mysited.com/geodata2055/service/mapagent.fcgi?SERVICE=WFS&MAXFEATURES=500&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=ns216630453:WW_MONITOR
Парсер будет проходить через эти шаги при посещении символов:
URL path: /localhost/Proxy.ashx
Query params starting: ?
Param name: url
Starting param value: =
(some of these next chars aren't valid, but I'll try my best!)
Param value:
https://www.mysited.com/geodata2055/service/mapagent.fcgi?SERVICE=WFS
Starting next param: &
Param name: MAXFEATURES
Starting param value: =
Param value: 500
...etc
Так как он сталкивается с &
при сканировании вашей строки он думает, что такие параметры, как MAXFEATURES
, являются параметрами запроса для вашего прокси-запроса, не часть параметра url
, переданного прокси-запросу. Поэтому, когда ваш прокси-код работает, он видит только то, что до &
.
Кодирование параметра URL даст вам:
/localhost/Proxy.ashx?url=https%3A%2F%2Fwww.mysited.com%2Fgeodata2055%2Fservice%2Fmapagent.fcgi%3FSERVICE%3DWFS%26MAXFEATURES%3D500%26VERSION%3D1.0.0%26REQUEST%3DGetFeature%26TYPENAME%3Dns216630453%3AWW_MONITOR
При этом парсер теперь видит толькоurl
параметр передан обработчику прокси. Когда прокси-обработчик теперь анализирует параметр url
, он декодирует его, возвращая вам исходный dest_url
Как общее практическое правило, никогда не используйте просто конкатенацию строк длясоздавать URL;URL-адреса не состоят из строк, они состоят из строк в кодировке URL.