IIS C#重写器

时间:2017-11-13 12:21:29

标签: iis asp.net-web-api

我刚刚开始在IIS中查看重写器模块的URL。

以下代码是我的工作原理(它从网站的所有网址中删除www)

<rewrite>
  <rules>
    <rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
   <match url="*" />
   <conditions>
      <add input="{CACHE_URL}" pattern="*://www.*" />       
   </conditions>
  <action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>

但是,我们有一个发布到http://www.example.com/api/controller/method的第三方API不再有效。 (它正在服务405&#39;)

问题是(我相信)虽然WebAPI允许www.example.com/api/controller/method进行POST,但它将example.com/api/controller/method视为不同的URL并且不允许POST。

但是,以下配置部分不起作用。 (注意,删除通配符部分意味着它确实有效,所以我确信我可以认为这是导致第三方失败的原因)。虽然在配置重写部分中测试IIS中的PassAPICall已通过。是不是我误解了stopProcessing的意图,实际上它只是停止处理该规则,所以它会通过以下条件下降?

<rules>
            <clear />
            <rule name="PassAPICall" stopProcessing="true">
                <match url="/api/Blah/QuotationComplete" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                <action type="None" />
            </rule>

 <rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
                <match url="*" />
                <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                    <add input="{CACHE_URL}" pattern="*://www.*" />
                </conditions>
                <action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" />
            </rule>

</rules>

1 个答案:

答案 0 :(得分:0)

是一个简单的语法问题,我需要对规则更加明确,而不是IIS测试工具让我相信。

改变

 <match url="/api/Blah/QuotationComplete" />

  <match url="^api/Blah/QuotationComplete$" />

做到了。