在策略定义中返回响应时如何使用变量?

2023-11-25

我正在 Azure API 管理的实例中配置入站策略。

首先,我设置一个变量:

<set-variable name="var1" value="" />

然后我发送一个请求

<send-request mode="new" response-variable-name="var1" timeout="20" ignore-error="false">

它返回一个 JSON。测试时,我在跟踪选项卡中收到以下消息:

GET 请求到 'https://my-api.azure-api.net/api/data' 已发送,结果存储在 'var1' 变量中。

我猜发送请求策略有效并且结果存储在变量中。 然后我想返回一个响应(仍在入站中,当尝试在出站中执行此操作时,我得到 500):

<return-response response-variable-name="existing response variable">
    <set-status code="200" reason="OK" />
    <set-header name="Content-Type" exists-action="override">
        <value>application/json</value>
    </set-header>
    <set-body>
    {
        "success": true,
        "var1": context.Variables["var1"]
    }
    </set-body>
</return-response>

我的问题是它不起作用......它只是渲染context.Variables["var1"].

也是如此:

  • @context.Variables["var1"]
  • @{ context.Variables.GetValueOrDefault<string>("var1") }
  • @context.Variables.GetValueOrDefault("var1")

所有这些都按书面形式呈现,没有提取任何价值。

编辑:我还尝试添加占位符字符串,然后使用

<find-and-replace from="Placeholder" to="context.Variables.GetValueOrDefault("var1")" />

并尝试将其放置在入站和出站中。但这一政策并未推出。

这是一个 JSON 对象,我想将其附加到响应中(小细节:实际上我遇到了多个变量的问题)。

我的问题是:如何将声明的变量添加到响应中?


有两种方法可以解决这个问题。您可以为此使用策略表达式:https://learn.microsoft.com/en-us/azure/api-management/api-management-policy-expressions。要记住的是,它们只能用于构建政策的整体价值,而不是政策的一部分,因此:

<set-body>@("{\"success\": true, \"var1\": " + ((IResponse)context.Variables["var1"]).Body.As<string>() + "}"</set-body>

Or with set-body您可以使用液体模板的政策:

<set-variable name="var1body" value="@((IResponse)context.Variables["var1"]).Body.As<string>())" />
<set-body template="liquid">
{
    "success": true,
    "var1": {{context.Variables["var1body"]}}
}
</set-body>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在策略定义中返回响应时如何使用变量? 的相关文章

随机推荐

  • 字符串流提取整数

    为什么我无法将整数值提取到Num多变的 include
  • 如何访问注释属性中描述的字段

    是否可以访问字段值 其中字段名称在注释中描述 该注释注释类中的另一个字段 例如 Entity public class User NotBlank private String password Match field password p
  • 如何防止 FOR JSON PATH 转义查询结果?

    我正在尝试编写一个相当复杂的 SQL 查询 生成 JSON 作为结果 除了一些硬编码数组之外 一切都工作得很好 我需要在必须使用的层次结构中更深入UNION ALL创造 我生成了一个查询 在此处显示了我的问题 不需要数据 我在 Azure
  • 使用 monad 堆栈进行依赖注入

    I m 尝试不同的方法执行有时称为依赖项注入的操作 为此 我详细阐述了一个天气应用程序的简单示例 我们要在其中获取天气数据 从网络服务或硬件设备 存储天气数据 可以是数据库或简单的文件 并报告 将其打印到屏幕上 或说出天气 这个想法是编写一
  • 在nodejs中将数据从子级传输到父级

    我有一个nodejs 父进程 它启动另一个nodejs 子进程 子进程执行一些逻辑 然后将输出返回给父进程 输出很大 我正在尝试使用管道进行通信 正如 child send 方法的文档中所建议的那样 顺便说一句 该方法工作正常 我希望有人建
  • IP_TRANSPARENT 用法

    我正在为 LAN 上的 Raspberry Pi 上的所有端口 1 65535 实现透明的 TCP UDP 代理 我目前正在测试将目标端口 80 的 TCP 数据包路由到 Raspberry Pi 这个想法是 一个接口 参见 代理 ip 捕
  • Android中如何获取内部存储的绝对路径

    内部存储路径 考虑上面的图片 它显示内部存储中的文件夹和文件 我的问题是我无法获取内部存储的绝对路径 我尝试过使用 字符串路径 getFilesDir getAbsolutePath 但它给了我应用程序存储的路径 我的目标是将文件从我的应用
  • powershell 无法识别 pipelinev

    我确定pipenv安装在以下路径中C Users Owner gt pip install pipenv 然后得到如下回复 Requirement already satisfied setuptools gt 36 2 1 in c us
  • R Shiny 自动开始下载

    我想在按下按钮时初始化 R Shiny 中文件的下载 并在生成文件之前进行一些检查 我用 downloadHandler 愚弄了周围 https shiny rstudio com gallery file download html 但我
  • Java:如何从 servlet 将文件上传到 WebDAV 服务器?

    我的 ajax 应用程序将文件从用户的浏览器上传到 Java 应用程序容器 我想做的是 上传完成后 我想将文件 发送 到 WebDAV 服务器 由主机名 即 localhost 端口 即 8080 和我想要的位置标识存储文件 即 dir1
  • 如何打开Neo4J Webadmin进行远程控制?

    我已经在我的服务器上的端口 7474 上安装了 Neo4J 实例 我的域也在使用该服务器 并且我希望使用如下用户名和密码远程使用 webadmin example com 7474 有没有办法做到这一点 我在 Neo4J 文档中找不到任何指
  • LINQ to SQL:如何更新唯一字段而不检索整个实体

    当我知道实体 ID 时 我想更新实体的唯一字段 在 LINQ to SQL 中是否可以不检索完整实体 使用 DataContext 中的所有字段 这是开销 是否可以创建实体并将其附加到 DataContext 并标记要在 DataConte
  • Mongoid 和 Rails 的字段别名

    MongoDB 中的常见做法是使用短键名来节省空间 例如 人们可能想使用 fn 而不是 first name 然而 在你的应用程序中 如果你到处使用 fn 你就完蛋了 太丑了 特别是对于 Rails 在 Mongoid 中声明字段时是否有一
  • 游戏点和框的数据结构

    什么是一个好的数据结构来表示游戏的状态点和框 我想出了使用 2 个布尔矩阵来表示水平线和垂直线 但也许有一种更优雅的方法来做到这一点 以及操作 add line 检查线 方格 使用一对二维布尔数组 称为linesX and linesY我感
  • 直接从 Perforce 命令行更改工作区 clobber 选项

    如何从命令行更改 perforce 规格 我想做的是 我有一个工作区 其 clobber 选项设置为noclobber 默认值 现在我想把它改成clobber 我知道我可以直接从p4v 但我不想要那样 我也知道如果我跑p4 client 它
  • 使用arm-linux-androideabi-gcc编译对象时出现问题

    背景 OSX 是操作系统 R8 NDK 我正在尝试使用 Android GCC 编译器编译以下类 include
  • 在 Pyramid 中,如何根据上下文内容使用不同的渲染器?

    我有 3 种不同的产品页面布局 我想根据有关产品的可用信息来显示它们 使用遍历我有一个名为ProductFinder获取所有信息 例如 用户转到domain green small 并ProductFinder将列出我的数据库中所有绿色和小
  • lua脚本错误检查

    是否可以在不执行lua脚本的情况下检查它是否包含错误 我有以下代码 if luaL loadbuffer L data size name fprintf stderr s lua tostring L 1 lua pop L 1 if l
  • 在 Kivy 中从内存加载图像

    我内存中有一张图片格式 从pyplot输出 我想通过Kivy直接在Android上显示它 但我不想创建图片文件 有什么办法可以做到这一点吗 在 pyplot 上 我可以通过编写对象来生成类似对象的文件 但我不知道如何将其放入 Kivy 中
  • 在策略定义中返回响应时如何使用变量?

    我正在 Azure API 管理的实例中配置入站策略 首先 我设置一个变量