URL重写适用于我除一个以外的所有URL

问题描述 投票:0回答:1

我的ARR URL重写适用于所有简单的url:作为

/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,未找到

我已经开发了Azure App Service中托管的Angular 8应用程序。后端位于其他位置,并且未启用CORS,因此需要反向代理。我关注了Ruslan http://ruslany.net/2014/05/using-azure-web-site-as-a-reverse-proxy/的部分内容。另外,有关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,但未对后端进行调用(已通过远程计算机中的wirehark进行了验证)。相反,AspNetStart尝试读取文件或文件夹api / sml.svc,最终导致404代码。

关于如何使它正常工作的任何建议,我们将不胜感激!

angular url-rewriting azure-web-sites arr
1个回答
0
投票

终于解决了!

我为此问题调用了Azure支持。他们发现无法正常工作的原因是对似乎是svc服务的呼叫进行了身份验证失败。

添加SVC处理程序解决了该问题:

<system.webServer>
    <handlers>
        <remove name="svc-Integrated-4.0" />
        <add name="svc-Integrated-4.0"
           path="api/sml.svc/*."
           verb="*"
           type=" System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

用于记录:后端是SAP Business One Servicel层。 sml.svc路径用于通过服务层公开的自定义计算视图。

© www.soinside.com 2019 - 2024. All rights reserved.