基于自定义 HTTP 的 UrlRewrite 条件 header

UrlRewrite condition based on custom HTTP header

我正在尝试在具有 2 个条件的 UrlRewrite 中配置规则:

根据此信息,我想重定向到 back-end 中 API 的不同版本。

问题 该规则在第一个条件下的行为符合预期。 它在 HTTP_HOST 匹配 api.contoso.com 时启动。 但是,它忽略了我的自定义 x-app-version header.

假设 因此,我担心 UrlRewrite 条件只能结合下拉列表中有限的一组预定义 HTTP headers(HTTP_HOSTREMOTE_ADDRESSREMOTE_HOST、... )

问题 假设是否正确,或者这应该是可能的吗? 我的配置或其他方法是否存在基于自定义 HTTP 条件的错误 header?

<rule name="ARR_test2" enabled="false">
  <match url="(.*)" />  
  <conditions>
    <add input="{HTTP_HOST}" pattern="api.contoso.com" />
    <add input="{x-app-version}" pattern="1" />
  </conditions>
  <action type="Rewrite" url="https://FARM_apiv1/{R:0}" />
</rule>

好的,我发现了如何在 UrlRewrite 条件下使用自定义 HTTP headers:

  • 自定义 header 需要在前面加上 "HTTP_"。
  • 用下划线替换破折号

例如:为了检索我的自定义 header "x-app-version",我可以使用 "HTTP_x_app_version"。 所以我的 UrlRewrite 配置应该是这样的

<rule name="ARR_test2" enabled="false">
  <match url="(.*)" />  
  <conditions>
    <add input="{HTTP_HOST}" pattern="api.contoso.com" />
    <add input="{HTTP_x_app_version}" pattern="1" />
  </conditions>
  <action type="Rewrite" url="https://FARM_apiv1/{R:0}" />
</rule>

其实文档里已经说的很清楚了: https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx