策略重写-uri要在Azure APIM中附加上下文变量

时间:2018-05-18 16:20:19

标签: azure url-rewriting policy azure-api-management

在策略重写期间,简单地附加到上下文变量的url(例如context.Variables["accountKey"])的方法是什么?

最终结果应为/accounts/232

我之前在设置

方面取得了成功
set-variable (0.003 ms)
{
    "message": "Context variable was successfully set.",
    "name": "accountKey",
    "value": "232"
}

尝试过的其中一件事:

<policies>
    <inbound>
        <base />
        <rewrite-uri template="/accounts/{accountKey}" />
    </inbound>

但是我收到了这个错误

> Error Receive
>     rewrite-uri (0.260 ms) {
>     "messages": [
>         null,
>         "Variable accountKey has no value.",
>         "Variable accountKey has no value."
>     ] }

3 个答案:

答案 0 :(得分:4)

在策略中配置入站规则,如下所示:

<inbound>
    <base />
    <set-variable name="accountKey" value="232" />
    <rewrite-uri template="@{
        return "/account/" + context.Variables.GetValueOrDefault<string>("accountKey");
    }"/>
</inbound>
rewrite-uri中的

{}用于原始请求URL中的查询字符串参数。

https://docs.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#RewriteURL了解有关rewrite-uri的更多详情。

答案 1 :(得分:2)

就我而言,我的网址是

https://test.com/send/

我需要从上下文变量名称(名称= {myName)中添加查询字符串

https://test.com/send/myName

这对我有用:

<rewrite-uri template="@($"{(string)context.Variables["name"]}")" />

答案 2 :(得分:0)

我最终使用此调用作为替代方案显示:

<rewrite-uri template="@($"/account/{(string)context.Variables["accountKey"]}/")" />