LogicApp - 模板语言函数 'contains' 期望它的第一个参数 'collection' 是一个字符串。提供的值是 'Null' 类型

LogicApp - The template language function 'contains' expects its first argument 'collection' to be a string. The provided value is of type 'Null'

我已经使用 Azure 服务总线队列触发器(当队列中收到消息时(自动完成))创建了一个 Azure 逻辑应用程序,用于重新处理死信队列消息。

在同一个逻辑应用程序中,我正在使用 DeadLetterReasonDeadLetterErrorDescription 属性值验证死信消息,然后将消息发布到活动队列。 但是对于少数死信消息不包含 DeadLetterErrorDescription 属性 名称和值。

逻辑应用中的验证码:

 "expression": {
                "or": [
                    {
                        "equals": [
                            "@triggerBody()?['Properties']?['DeadLetterReason']",
                            "TTLExpiredException"
                        ]
                    },
                    {
                        "and": [
                            {
                                "not": {
                                    "equals": [
                                        "@triggerBody()?['Properties']?['DeadLetterReason']",
                                        200
                                    ]
                                }
                            },
                            {
                                "not": {
                                    "contains": [
                                        "@triggerBody()?['Properties']?['DeadLetterErrorDescription']",
                                        "NotFoundException"
                                    ]
                                }
                            }
                        ]
                    }
                ]
            },

错误:

InvalidTemplate. Unable to process template language expressions for action 'Validate_the_DLQ_message_reason_and_description' at line '1' and column '3467': 'The template language function 'contains' expects its first argument 'collection' to be a dictionary (object), an array or a string. The provided value is of type 'Null'.'.

验证逻辑:

  1. 需要验证服务总线队列触发器属性中的 DeadLetterReasonDeadLetterErrorDescription 属性。
  2. 如果存在上述属性,那么我需要验证这些属性的值。

所以,请教我如何验证上面的属性名称是否存在于收到的死信消息中。

尝试使用 coalesce 函数将 null 替换为空字符串:

"expression": {
    "or": [
        {
            "equals": [
                "@coalesce(triggerBody()?['Properties']?['DeadLetterReason'], '')",
                "TTLExpiredException"
            ]
        },
        {
            "and": [
                {
                    "not": {
                        "equals": [
                            "@coalesce(triggerBody()?['Properties']?['DeadLetterReason'], '')",
                            "200"
                        ]
                    }
                },
                {
                    "not": {
                        "contains": [
                            "@coalesce(triggerBody()?['Properties']?['DeadLetterErrorDescription'], '')",
                            "NotFoundException"
                        ]
                    }
                }
            ]
        }
    ]
},