json 如何在Azure API管理中访问设置变量策略中的请求正文?

fgw7neuy  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(111)

json请求体包含一个我想要访问并存储在context.Variable中的值,这样以后我就可以在控制流表达式中使用它。
下面是JSON请求体:

{
    "File": [
      {
        "Key": "ValueToGet",
        "List": [
          {},
          {}
        ]
      }
    ]
  }

我希望“ValueToGet”是set-variable策略的值,如下所示:

<set-variable name="myVar" value="ValueToGet">

我尝试用这个表达式将body存储在一个单独的变量中:

<set-variable name="varBody" value="@(context.Request.Body.As<JObject>())" />

然后在下一个set变量策略中使用它:

<set-variable name="myVar" value="@{
        JObject json = JObject.Parse(context.Variables.GetValueOrDefault<string>("varBody"));
        var code = json.GetValue("Key");
        return code;
        }" />

但它似乎不起作用,我收到以下错误,这与我存储身体的方式有关:

{
    "messages": [
        {
            "message": "Expression evaluation failed.",
            "expression": "context.Request.Body.As<JObject>()",
            "details": "Object reference not set to an instance of an object."
        },
        "Expression evaluation failed. Object reference not set to an instance of an object.",
        "Object reference not set to an instance of an object."
    ]
}

当我试图访问同一个set-variable策略中的请求体时,也会出现同样的错误。
我为这个问题绞尽脑汁已经有一段时间了,如果能得到任何帮助,我将不胜感激。谢谢

p1iqtdky

p1iqtdky1#

如果你只是想设置一个变量的值Key的第一个File项目,只需尝试下面的表达式:

<set-variable name="myVar" value="@(context.Request.Body.As<JObject>()["File"][0]["Key"])" />

我已经在我这边测试了你的请求体,它对我来说非常有效:

跟踪日志:

相关问题