Мой ARR URL Rewrite работает для всех простых URL: s
/api/Login
, /api/BusinessPartners
, но не для этого:
/api/sml.svc/LIF_cv_ServiceCallsParameters(FromDate='2019-11-04',ToDate='2019-11-11',CardCode='EMPTY',CallType=0,ProbType=0,ProbSubType=0,Status=0,Owner=0,Tech=0,LineStat='ASFC')/LIF_cv_ServiceCalls
Я получаю 404, не найден
Я разработал приложение Angular 8, размещенное в службе приложений Azure. Серверная часть находится в другом месте и не поддерживает CORS, поэтому необходим обратный прокси-сервер. Я следовал за частями http://ruslany.net/2014/05/using-azure-web-site-as-a-reverse-proxy/. Plus Руслана, многих других постов, связанных с обратным прокси ARR.
Вот мой applicationHost.xdt, расположенный в каталоге / site.
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="false"
reverseRewriteHostInResponseHeaders="false">
</proxy>
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" xdt:Transform="InsertIfMissing" />
<add name="HTTP_ACCEPT_ENCODING" xdt:Transform="Insert" />
<add name="HTTP_X_ORIGINAL_HOST" xdt:Transform="InsertIfMissing" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</configuration>
Правила в web.config:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Angular Routes" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
<rule name="proxy" stopProcessing="true">
<match url="api/(.*)" />
<action type="Rewrite" url="http://XX.XX.XX.XX:50001/b1s/v1/{R:1}"/>
<serverVariables>
<!--set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" /-->
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Части FailedRequestLog:
76. URL_CHANGED
OldUrl="/api/sml.svc/LIF_cv_ServiceCallsParameters(FromDate='2019-01-01',ToDate='2050-01-01',CardCode='EMPTY',CallType=0,ProbType=0,ProbSubType=0,Status=0,Owner=0,Tech=0,LineStat='U')/LIF_cv_ServiceCalls",
NewUrl="http://XX.XX.XX.XX:50001/b1s/v1/sml.svc/LIF_cv_ServiceCallsParameters(FromDate='2019-01-01',ToDate='2050-01-01',CardCode='EMPTY',CallType=0,ProbType=0,ProbSubType=0,Status=0,Owner=0,Tech=0,LineStat='U')/LIF_cv_ServiceCalls"
87. AspNetStart Data1="GET", Data2="/api/sml.svc", Data3=""
Точный вызов в NewUrl
работает в PostMan.
Кажется, чтоПравило перезаписи правильно обрабатывает URL, но вызов не выполняется бэкэнду (проверено с помощью wireshark на удаленном компьютере). Вместо этого AspNetStart пытается прочитать файл или папку api / sml.svc, что в итоге приводит к коду 404.
Любые предложения о том, как заставить это работать, очень приветствуются!