基于自定义 HTTP 的 UrlRewrite 条件 header
UrlRewrite condition based on custom HTTP header
我正在尝试在具有 2 个条件的 UrlRewrite 中配置规则:
- HTTP header
HTTP_HOST
需要匹配某个域 (api.contoso.com)
- 自定义 HTTP header
x-app-version
需要出现在 HTTP 请求中
根据此信息,我想重定向到 back-end 中 API 的不同版本。
问题
该规则在第一个条件下的行为符合预期。
它在 HTTP_HOST
匹配 api.contoso.com 时启动。
但是,它忽略了我的自定义 x-app-version
header.
假设
因此,我担心 UrlRewrite 条件只能结合下拉列表中有限的一组预定义 HTTP headers(HTTP_HOST
、REMOTE_ADDRESS
、REMOTE_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
我正在尝试在具有 2 个条件的 UrlRewrite 中配置规则:
- HTTP header
HTTP_HOST
需要匹配某个域 (api.contoso.com) - 自定义 HTTP header
x-app-version
需要出现在 HTTP 请求中
根据此信息,我想重定向到 back-end 中 API 的不同版本。
问题
该规则在第一个条件下的行为符合预期。
它在 HTTP_HOST
匹配 api.contoso.com 时启动。
但是,它忽略了我的自定义 x-app-version
header.
假设
因此,我担心 UrlRewrite 条件只能结合下拉列表中有限的一组预定义 HTTP headers(HTTP_HOST
、REMOTE_ADDRESS
、REMOTE_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