首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure API管理(策略)

Azure API管理(策略)
EN

Stack Overflow用户
提问于 2022-09-02 04:23:23
回答 1查看 165关注 0票数 1

我需要帮助为我的任务之一建立APIM策略。

我有两个有效载荷。

从外部服务中获取“UniqueID”并验证web钩子是否来自该外部服务的人。

当发送请求时,另一个有效负载在请求体中。

这两个有效载荷有点不同,所以当我将来自外部服务的有效负载放在一起时,我会得到缺少的body请求,因为API期望请求主体中的另一个有效负载。

我想要APIM做的是修改(更改键名,添加新键),使有效负载看起来与API所期望的完全一样。

Payload1

代码语言:javascript
复制
{
  "DocumentID": "221",
  "UniqueID": "1001",
  "dependentee_name": {
    "first": "Tony",
    "last": "Stark"
  },
  "insurer_first_name": "Steve",
  "insurer_last_name": "Rogers"
}

Payload2

代码语言:javascript
复制
{
  "insurer": {
    "firstName": "Steve",
    "lastName": "Rogers"
  },
  "dependentee": {
    "firstName": "Tony",
    "lastName": "Stark"
  }
}

Payload3 -预期

代码语言:javascript
复制
{
  "DocumentID": "221",
  "UniqueID": "1001",
  "insurer": {
    "firstName": "Steve",
    "lastName": "Rogers"
  },
  "dependentee": {
    "firstName": "Tony",
    "lastName": "Stark"
  }
}

我知道我必须做一些事情,或设置变量,以获得身体。但我不确定,我将如何添加键和修改它的名称。任何Azure管理的例子都是非常有用的

EN

回答 1

Stack Overflow用户

发布于 2022-09-02 05:13:46

我不确定是否理解您的问题,但我可以提供一个如何更改JSON对象结构的示例。使用新的结构创建了一个新的JObject,请求体的值必须在新对象中设置。

因此,我创建了一个POST操作来转换JSON:

请求体: Payload1

  • Response

  • :Payload3

政策:

代码语言:javascript
复制
<policies>
    <inbound>
        <base />
        <return-response>
            <set-status code="200" reason="ok" />
            <set-header name="Content-Type" exists-action="override">
                <value>application/json</value>
            </set-header>
            <set-body>@{
                var body = context.Request.Body.As<JObject>(true);

                var transformedBody = new JObject();
                transformedBody["DocumentID"] = body["DocumentID"];
                transformedBody["UniqueID"] = body["UniqueID"];

                var insurer = new JObject();
                insurer["firstName"] = body["insurer_first_name"];
                insurer["lastName"] = body["insurer_last_name"];
                transformedBody["insurer"] = insurer;

                var bodyDependentee_name = body["dependentee_name"] as JObject;

                var dependentee = new JObject();
                dependentee["firstName"] = bodyDependentee_name["first"];
                dependentee["lastName"] = bodyDependentee_name["last"];
                transformedBody["dependentee"] = dependentee;

                return transformedBody.ToString();               
            }</set-body>
        </return-response>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

结果:

POST https://rfqapiservicey27itmeb4cf7q.azure-api.net/abc/transform HTTP/1.1

主机: rfqapiservicey27itmeb4cf7q.azure-api.net

代码语言:javascript
复制
{
  "DocumentID": "221",
  "UniqueID": "1001",
  "dependentee_name": {
    "first": "Tony",
    "last": "Stark"
  },
  "insurer_first_name": "Steve",
  "insurer_last_name": "Rogers"
}

HTTP/1.1200ok

内容长度: 202

内容类型: application/json

日期:星期五,9月02日05:05:58格林尼治时间

请求-上下文: appId=cid-v1:a10dc7c9-c354-40a2-acf3-1401681f7808

差异:来源

代码语言:javascript
复制
{
  "DocumentID": "221",
  "UniqueID": "1001",
  "insurer": {
    "firstName": "Steve",
    "lastName": "Rogers"
  },
  "dependentee": {
    "firstName": "Tony",
    "lastName": "Stark"
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73577760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档