美好的一天,
我尝试使用“缓存存储值”策略将传入的 JSON 负载存储到 Azure API Manager 内部缓存中。 key 将是有效负载内的字段之一。我能够提取 key ,但是当我尝试存储有效负载时,我收到错误
“表达式计算失败。未将对象引用设置为对象的实例。”
这是我正在编写的代码
<policies>
<inbound>
<base />
<set-variable name="processIdKey" value="@((string)context.Request.Body.As<JObject>()["id"])" />
<set-variable name="validationResults" value="@(context.Request.Body.As<JObject>())" />
<cache-store-value key="@((string)context.Variables["processIdKey"])" value="@((string)context.Variables["validationResults"])" duration="30" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
我稍后需要在 api 的另一个方法中提取该值,因此需要知道如何将 JSON 有效负载存储在缓存中并提取相同的内容以作为另一个方法中的响应发送。
预先感谢您的帮助。
最佳答案
我找到了答案,问题是,我们无法在整个代理中多次提取 context.Request 对象。所以我要做的就是将其存储在变量中作为 JObject,然后从中提取“id”字段。稍后将其转换为字符串以存储在缓存中。这是更新后的代码。
<policies>
<inbound>
<base />
<set-variable name="validationResults" value="@(context.Request.Body.As<JObject>())" />
<set-variable name="processIdKey" value="@((string)((JObject)context.Variables["validationResults"])["id"])" />
<set-variable name="payload" value="@((string)((JObject)context.Variables["validationResults"]).ToString())" />
<cache-store-value key="@((string)context.Variables["processIdKey"])" value="@((string)context.Variables["payload"])" duration="30" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
希望有帮助。谢谢。
关于azure-api-management - 如何使用 Azure API Manager 缓存存储值策略存储 JSON 有效负载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845273/