微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

迭代Azure API管理策略中的数组声明

如何解决迭代Azure API管理策略中的数组声明

我想在azure api管理策略中迭代对JWT令牌的声明

<set-variable name="testparams" value="@(context.Request.Headers["Authorization"].First().Split(' ')[1].AsJwt()?.Claims["carlist"].FirstOrDefault())" />

<set-variable name="values">
        {% for value in testparams %}
            if(value=="BMW")
               <set-variable name="testparams" value=true />
               break
            else
            <set-variable name="testparams" value=false />
        {% endfor %}
    />
        <base />
    </inbound>
<policies>

这是我要迭代并设置成功的变量的方式。当我将此代码放入天蓝色策略时,它显示语法错误。如何实现此目标?

索赔是

carlist =“ [宝马,奥迪,菲亚特]”

解决方法

您的代码中有一些错误。

首先,.FirstOrDefault()将获得列表的第一项。根据我的测试,它将获得“ 宝马”,而不是“ [宝马,奥迪,菲亚特] ”。

然后,如果我们使用不带<set-variable name="testparams" value="@(context.Request.Headers["Authorization"].First().Split(' ')[1].AsJwt()?.Claims["carlist"])" />的{​​{1}}。由于无法在.FirstOrDefault()标签中将变量设置为数组,因此将显示错误消息。

除此之外,在您的下一个代码中,我对如何设置变量感到困惑。我不知道您是否要将值<set-variable>设置为变量true/false或变量testparams。代码中有一些语法错误。

根据一些测试,我认为很难从jwt令牌中获取数组列表并将其设置为values标签中的变量。我提供了一种变通方法供您参考,可以在<set-variable>的代码中设置变量resultVar。请检查它是否满足您的要求。

<set-body>
,

或者您可以像这样简化您的机体

<inbound>
   <base />
   <set-body>@{
       string[] carList = context.Request.Headers["Authorization"].First().Split(' ')[1].AsJwt()?.Claims["carlist"];
       return carList.Contains("BMW").ToString();
  }
   </set-body>
</inbound>
,

如果输入为 json 类型时,如果有人仍在寻找在 set-variable 中循环的答案,这可能会有所帮助

<set-variable name="values" value="@{
            JObject json = (JObject)context.Variables["testparams"];
 var array = (json)["carlist"];       
var ret = (string)"";//set some default string or bool data;
           foreach (var value in array)
                    {
            if ((string)value=="BMW")
            {
             ret = "true";
               break;
               }
            else
            {
            ret = "false";
            }
            }
            return ret;
            }" />

(我只在我处理过的一个场景中使用了“If”。还没有真正尝试过“else”。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。