【发布时间】:2020-09-15 09:32:29
【问题描述】:
我正在使用 Azure API 管理策略表达式将供应商值发送到每个帖子,向后端 API 发送和删除请求。我编写了一个代码,当请求类型为 JObject 时运行良好。但在某些情况下,请求可以是 JArray 类型,在这种情况下会引发 500 错误。下面的 sn-p 适用于 JObject。
<set-variable name="Supplier" value="DummySupplier" />
<choose>
<when condition="@(new [] {"post", "put", "delete"}.Contains(context.Request.Method, StringComparer.OrdinalIgnoreCase))">
<set-body>@{
JObject body = context.Request.Body.As<JObject>();
body.Add(new JProperty("Supplier", ((string)context.Variables["Supplier"])));
return body.ToString();
}
</set-body>
</when>
</choose>
我需要一个可以检查请求正文类型并进行相应解析的条件。否则如果请求正文是 IEnumerable/JArray 类型,那么上面的代码会给我错误。
当我在请求正文中有 IEnumerable 时出现以下错误
消息正文不是有效的 JSON。从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。路径'',第 1 行,位置 1。
在 Newtonsoft.Json.Linq.JObject.Load(JsonReader 阅读器,JsonLoadSettings 设置)
在 Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody.AsJObject(流流,编码编码,JsonSerializerSettings 设置)
在 Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody.As[T](Boolean preserveContent)
你能帮我解决这个问题吗?
【问题讨论】:
标签: c# azure azure-api-management