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

标签 c# json azure azure-api-management

json 请求正文包含一个我想要访问并存储在上下文中的值。变量,因此稍后我可以在控制流表达式中使用它。

这是 json 请求正文:

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

我希望“ValueToGet”成为设置变量策略的值,如下所示:

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

我尝试使用以下表达式将主体存储在单独的变量中:

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

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

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

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

{
    "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."
    ]
}

当我尝试在同一设置变量策略中访问请求正文时,出现相同的错误。

我已经为这个问题苦苦挣扎了一段时间,非常感谢任何帮助。谢谢。

最佳答案

如果您只想使用第一个 File 项的 Key 的值设置一个变量,只需尝试以下表达式:

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

我已经用您的请求正文进行了测试,它非常适合我:

enter image description here

跟踪日志:

enter image description here

关于c# - 如何访问 Azure API 管理中设置变量策略中的请求正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66920005/

相关文章:

c# - 旋转 itextsharp PdfPtable

c# - windows phone 8.1 如何制作确定的圆形进度条

javascript - 将外部 json 文件转换为 html 表

ios - 在 RESTkit 中为 JSON 数组中的对象指定特定映射?

.net - Azure WebJob 存储连接

c# - 从数组中取出两个数,使和为常数

c# - 是否有可能在C#WPF应用程序中全局捕获意外错误-C#4.0

json - dotnet 编译错误; aspnetcore.mvc.razor.viewcompliation.rsp 退出,代码为 1

bash - Azure Pipelines 的 YAML 文件中的 Echo 打印不同的内容

Azure 搜索未返回正确的结果。搜索查询中的(点)