繁体   English   中英

Azure 逻辑应用程序:通过条件更改 HTTP 请求正文

[英]Azure Logic Apps: Change HTTP request body via condition

我目前正在开发一个 Azure 逻辑应用程序,它通过重复执行 HTTP POST 请求来导入数据。 我的后端有一个属性可能不是 null 或为空,因为我不想更改它,所以我尝试根本不在请求正文中包含该属性。

例如

{
    "id": "1234-5678",
    "value": @{variables('myId')}
} 

如果变量既不是 null 也不是空的,则只应包含在正文中。 我尝试添加一个类似于

if(not(variables('myId')), '', concat(',{"id":"1234-5678","value": ', variables('myId'), '},'))

请求正文使其更具动态性,但现在它表示正文不再有效(无效的 json)。 还有什么我可以用的吗? 使用条件和多个不同的 HTTP 请求不是一个选项,因为我有多个值需要这种处理。

是的,先添加它,然后使用围绕removeProperty表达式的条件将其删除。 您也可以使用addProperty方法,但我选择了前者。 真的没关系。

将此定义加载到您的租户中,您将看到它正在运行。

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Initialize_MyId": {
                "inputs": {
                    "variables": [
                        {
                            "name": "MyId",
                            "type": "string"
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Initialize_New_Payload": {
                "inputs": {
                    "variables": [
                        {
                            "name": "New Payload",
                            "type": "object",
                            "value": "@if(equals(variables('MyId'), ''), removeProperty(variables('Payload'), 'value'), variables('Payload'))"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_Payload": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_Payload": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Payload",
                            "type": "object",
                            "value": {
                                "id": "1234-5678",
                                "value": "@{variables('myId')}"
                            }
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_MyId": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "Recurrence": {
                "evaluatedRecurrence": {
                    "frequency": "Month",
                    "interval": 3
                },
                "recurrence": {
                    "frequency": "Month",
                    "interval": 3
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {}
}

作为一个基本的例子,我有三个步骤......

  1. 创建一个存储MyId值的变量
  2. 创建一个类型为 Object 的变量,用于存储您在问题中提到的有效载荷。
  3. 如果MyId的值为空,则使用条件删除属性。

有问题的具体表达是...

if(equals(variables('MyId'), ''), removeProperty(variables('Payload'), 'value'), variables('Payload'))

流

结果空白

结果空白

结果不为空

结果不为空

我选择通过发送多个请求来解决这个问题,第一个请求用于所有已经工作的属性,然后一个用于每个“特殊”属性。 我知道这会严重损害应用程序的性能,但随着时间的推移,我还是选择了它。

首先,我使用 POST 请求在数据库中创建一个 object,使用相应的 function 将其解析为 JSON,获取 object id,然后根据我拥有的值对其执行多个 PUT 请求。 如果我的值存在,我只向 object 添加一个属性,如果该值不存在,我根本不执行请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM