#iis #url-rewriting
Вопрос:
У меня работает служба API, которая принимает различные вызовы API с длинной строкой параметров, которая работает. Недавно я создал сайт перенаправления IIS в качестве посредника для поддержки https, где система API поддерживает только http-вызовы. Процесс перезаписи https работает нормально. Однако я заметил, что процесс перезаписи URL-адреса IIS частично декодирует URL-адрес перед отправкой его в службу API, где службе не удается декодировать URL-адрес. Сведения о вызове API следующие:
Прямой вызов службы API(это отлично работает)
Декодированный URL-адрес (Пожалуйста, обратите внимание, что кодирование необходимо выполнить для отправки дат, попадающих в URL-адрес):
Раздел параметров, который получает служба API:
«[{«FilterTypeID»:6001,»NotOperator»:false,»SortOrder»:0,»StartGroup»:0,»EndGroup»:0,»Values»:[«SO»],»OperatorType»:»operator_Equals»,»SortType»:»SortType_Ascending»,»LogicOp»:»LogicOp_And»,»IsValid»:»False»,»RefCount»:»0″,»Changed»:false},{«FilterTypeID»:6003,»StartGroup»:1,»EndGroup»:1,»AvailableOperators»:[],»NotOperator»:false,»OperatorType»:»operator_Between»,»Values»:[«13/05/2021″,»11/08/2021″],»LogicOp»:»LogicOp_And»,»SortOrder»:1,»SortType»:»SortType_Descending»,»IsValid»:»False»,»RefCount»:»0″}]»
Вызов службы API через процесс перезаписи IIS:
Исходный URL-адрес, который передается на сайт ISS (точно такой же вызов, кроме https и dns) :
Раздел параметров, который служба API получает от процесса перезаписи ISS:
«[{«FilterTypeID»:6001,»NotOperator»:false,»SortOrder»:0,»StartGroup»:0,»EndGroup»:0,»Values»:[«SO»],»OperatorType»:»operator_Equals»,»SortType»:»SortType_Ascending»,»LogicOp»:»LogicOp_And»,»IsValid»:»False»,»RefCount»:»0″,»Changed»:false},{«FilterTypeID»:6003,»StartGroup»:1,»EndGroup»:1,»AvailableOperators»:[],»NotOperator»:false,»OperatorType»:»operator_Between»,»Values»:[«13/05/2021″,»11/08/2021″],»LogicOp»:»LogicOp_And»,»SortOrder»:1,»SortType»:»SortType_Descending»,»IsValid»:»False»,»RefCount»:»0″}]»
Когда разделы параметров сравниваются в любом случае, становится ясно, что URL-адрес, восстановленный с помощью процесса перезаписи IIS, декодировал некоторые символы, такие как «:» и», » (пример: около 6001 в разделе параметров)
Может кто-нибудь помочь мне решить эту проблему. Необходимо настроить процесс перезаписи IIS для передачи точного списка параметров URL, который он получил, в службу API без какого-либо декодирования или кодирования.
Мое содержимое файла web.config для перезаписи IIS выглядит следующим образом (обратите внимание, что необходимо установить значения maxRequestLength, maxUrlLength, maxQueryStringLength для длинных URL-адресов и requestValidationMode=»2.0″ для поддержки проверки URL-адресов cirtan)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8041/{R:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
<system.web>
<httpRuntime maxRequestLength="2097151" maxUrlLength="2097151" maxQueryStringLength="2097151" requestValidationMode="2.0" />
</system.web>
</configuration>
Заранее спасибо,
Дэн
Ответ №1:
В iis есть флаг функции, useOriginalURLEncoding, который позволяет отключить эту несоответствующую кодировку URL-адреса, если установлено значение true.
Чтобы установить флажок «Перейти IIS Manager
«, затем выберите Configuration Editor
и перейдите в раздел system.webServer/rewrite/rules
, где вы найдете useOriginalURLEncoding
флаг, установите флаг в значение false, и перезапись URL-адреса больше не будет кодировать URL-адрес.
Комментарии:
1. Спасибо вам за ответ. Я установил значение useOriginalURLEncoding в значение false. Я даже перезапустил сервер, чтобы убедиться в этом. Но все равно у меня та же проблема.
2. Я предлагаю вам открыть для этого заявку в службу поддержки , инженеры Microsoft помогут найти первопричину.