检查context.Request.Body的条件是azure api管理策略中的JArray或JObject

2023-12-28

我正在使用 Azure API 管理策略表达式将供应商值发送到每个帖子、对后端 API 的放置和删除请求。我编写了一个代码,当请求类型为 JObject 时,该代码工作正常。但我有一些请求可以是 JArray 类型的情况,在这种情况下它会抛出 500 错误。下面的代码片段对于 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(Stream 流、Encoding 编码、JsonSerializerSettings 设置)
在 Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody.As[T](布尔保留内容)

你能帮我解决这个问题吗?


不是最干净的解决方案,但可以考虑您的要求。请注意,我现在正在解析为下面的 JToken,它是 JObject 和 JArray 的基础。检查完类型之后再做事。

<set-variable name="Supplier" value="DummySupplier" />
    <choose>
        <when condition="@(new [] {"post", "put", "delete"}.Contains(context.Request.Method, StringComparer.OrdinalIgnoreCase))">
            <set-body>@{ 
                         JToken body = context.Request.Body.As<JToken>();
                         if (body.Type == JTokenType.Array)
                         {
                             JObject newBody = new JObject();
                             newBody["OriginalArray"] = body;
                             newBody["Supplier"] = (string)context.Variables["Supplier"];                             
                             return newBody.ToString();
                         }

                         if (body.Type == JTokenType.Object)
                         {
                             body["Supplier"] = (string)context.Variables["Supplier"];
                             return body.ToString();
                         }
                         
                         return context.Request.Body.ToString();
                       }
            </set-body>
        </when>
    </choose>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查context.Request.Body的条件是azure api管理策略中的JArray或JObject 的相关文章

  • 成员字段、构建顺序

    在 C 中 当执行如下所示的操作时 构造顺序是否得到保证 Logger Logger kFilePath logs runtime log logFile kFilePath 是的 施工顺序始终得到保证 但是 不能保证它与对象在初始值设定项
  • 如何向WebRequest添加参数?

    我需要从 Web 服务调用一个方法 所以我编写了以下代码 private string urlPath http xxx xxx xxx manager string request urlPath index php org get or
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • 如何使用最小起订量模拟私有只读 IList 属性

    我试图嘲笑这个列表 private readonly IList
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 部署到 azure 然后收到 403 - 访问禁止

    我正在尝试部署到 Azure Silverlight 应用程序 我已迁移数据库 更新连接字符串并将应用程序发布到 Azure 但是当我单击服务 URL 时 我得到以下信息 403 禁止 访问被拒绝 您无权使用您提供的凭据查看此目录或页面 知
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • 如何阻止 Control-I 在 CoreWindow 范围内的 UWP 文本框中插入选项卡?

    当我在 UWP 应用程序中有一个 TextBox 时 对我来说 奇怪的行为 在 Windows 10 中创建通用的空白应用程序 UWP 应用程序 使用以下代码将文本框添加到默认网格
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • 如何使用 Xcode 和 Git 处理不同的库搜索路径?

    我正在和朋友一起开发一个应用程序 我们使用 git 私有 作为版本控制系统 我们面临的问题是 Xcode 5 1 DP2 给出此警告 Apple Mach O 链接器警告 未找到目录 出现此警告的原因是 Xcode 在我的硬盘上找不到我朋友
  • 在原则 2 中指定表类型/存储引擎

    那么如何在原则 2 中指定用于给定实体的存储引擎呢 我正在创建一个需要全文索引的表 并且只有 MyISAM 存储引擎支持 MySQL 中的全文索引 另一方面 看起来 Doctrine 2 不支持开箱即用的全文索引 也没有全文搜索 那是对的吗
  • ColdFusion 变量竞争条件?

    我需要一些帮助来确定为什么这个特定的代码在极少数情况下会产生竞争条件 我找到了一个解决方案 我也会概述它 但我真的很想理解它 我们有一个基于 CMS 的系统 由许多松散地基于保险丝盒模型的模块组成 一切都通过单个index cfm 运行 在
  • 为 docker 容器提供可路由的 IP 地址

    我在 ubuntu 14 04 上运行它并且已经设置docker0到静态 IP 然后通过防火墙从公共 IP 路由到该静态 IP 我正在尝试将后端 API 设置为在 docker 容器中运行 但对一些事情感到困惑 1 我将如何映射docker
  • 了解 C++ 中随机数生成器的种子是什么

    我有一个非托管 C 控制台应用程序 其中使用 srand 和 rand 我不需要这个来解决特定问题 但很好奇 传递给 srand 的原始种子是否存储在我可以查询的内存中的某个位置 有什么办法可以知道种子是什么吗 不需要存储种子 只需要存储最
  • Vuetify 中的颜色主题更改不起作用

    我将 vuejs 与 vuetify 一起使用 我放置了基本 vuetify 模板并尝试更改颜色主题 但颜色不会切换 我的控制台中没有出现任何错误 并且我的缓存也被清除 main js代码 import Vue from vue impor
  • VM 快照期间 BizTalk 与 SQL 的连接问题

    我们有一个用于 BizTalk 的虚拟机和一个用于 SQL 后端的单独虚拟机 我们使用 Veeam 进行备份 这基本上会启动虚拟机的快照 当此快照在 SQL VM 上最终确定时 应用程序服务器上的 BizTalk 服务将失败 通常它们会自动
  • 检测是否开启“蓝牙扫描”定位

    从 Android M 开始 如果您启用了蓝牙设备 即使全球定位已关闭 也可以在后台扫描蓝牙设备 蓝牙扫描位置设置中的选项 参见屏幕截图 为了扫描 BLE 设备 必须满足以下条件 COARSE LOCATION or FINE LOCATI
  • 使用 C# 将布尔数组转换为字符串

    我有一个看起来像这样的数组 status 0 true status 1 true status 2 false status 3 true 实际上它更大 但仍然小于 20 我需要将其转换为 ABD 其中每个 true 代表字母表中的一个有
  • 使用芯片输入选择不显示所选值

    我有一个选择 输入采用芯片格式 我尝试了所选值的控制台日志 效果很好 但由于某种原因 它没有显示在选择框中 我在这里做错了什么 handleChange event gt this setState badge event target v
  • Spring Boot中事务同步与Database+kafka示例

    我想使用 Spring boot 编写一个新应用程序 使用 MySQL Mango 数据库和 Spring Kafka 进行消息传递 我尝试使用 Many POC 来同步 Kafka 和 DB 之间的事务 但在某些情况下失败了 并且我还搜索
  • 如何访问 CGContext 以在屏幕外创建 CGLayer

    意图 创造CGLayer在屏幕外 从第二个线程在其上绘制一些复杂的东西 稍后使用它在主线程上快速绘制 Problem CGLayerCreateWithContext context size info 期望已经存在的CGContext这样
  • 如何在 ASP.net IIS 7.5 中利用浏览器缓存

    以下可缓存资源的新鲜生命周期较短 指定以下资源至少在未来一周内到期 http pagespeed googlelabs com http pagespeed googlelabs com建议我将此作为我的网站的高度优先事项 我正在使用 Wi
  • 用于 GUI 的 Java 2D 场景图形库

    我正在寻找用于构建 GUI 应用程序的 2D 场景图形库 它应该很快 使用 Java2D 并与 Swing 兼容 可嵌入 Swing 应用程序并显示 Swing 组件 对动画的支持是一个优点 您有使用某些图书馆的经验吗 有没有我错过的图书馆
  • Numpy 图像数组:如何有效地从 RGB 切换到 Hex

    我一直在使用嵌套 for 循环将 RGB 图像转换为十六进制值的图像数组 但对于大图像来说太慢了 有谁知道可以帮助我从 RGB 切换回 HEX 的快速方法和 或库 编辑 ragingSloth 这是我想出的 但对于我的需要来说太慢了 def
  • 如何在 Travis CI 上安装某些东西而不超时?

    我正在尝试测试 travis ci org 上构建的包 但 pip install scipy 遇到超时 Installing collected packages scipy Running setup py install for sc
  • 如何从 Excel 单元格获取完整值,而不是显示的(四舍五入)值?

    我在从工作表的单元格检索确切值时遇到问题 如果我打开文件 单元格有一个十进制数 仅显示 4 位小数 但如果我单击特定单元格 则该值会不同 有 6 位小数 我知道这是应用于单元格的设置 以便仅显示 4 位小数 现在我尝试使用 ClosedXM
  • WPF中如何移动焦点?

    我想知道是否有办法将焦点从当前控件移至 WPF 中 TabIndex 分配的控件上的其他控件 例子 我有 TabIndex 1 到 5 的控件 有没有办法将焦点从 1 跳转到 5
  • 从 C# 类设置 Gridview“标题”的样式

    我正在尝试在 C 文件中设置 ASP Net GridView 标题的样式 这是我返回样式化 GridView 的方法 private GridView setupGridView string caption var gview new
  • 检查context.Request.Body的条件是azure api管理策略中的JArray或JObject

    我正在使用 Azure API 管理策略表达式将供应商值发送到每个帖子 对后端 API 的放置和删除请求 我编写了一个代码 当请求类型为 JObject 时 该代码工作正常 但我有一些请求可以是 JArray 类型的情况 在这种情况下它会抛