我们使用逻辑应用将消息发送到服务总线。这些消息稍后将由另一个服务使用,该服务期望消息内容是一个字符串 - 本质上是一个字符串化的 JSON 对象,带有转义字符。
我们找不到在逻辑应用中字符串化 JSON 对象的方法。即使我们显式提供转义字符串,逻辑应用本身也会检测到它是字符串化的 JSON,并将其取消转义,然后将其作为 JSON 对象发送。我们不想要这样,我们只是希望它按原样发送字符串。我们已经尝试将内容类型更改为文本/纯文本,但它不起作用。逻辑应用始终将未转义的字符串作为 JSON 发送。
MSDN:https://social.msdn.microsoft.com/Forums/office/en-US/e5dee958-09a7-4784-b1bf-facdd6b8a568/post-json-from-logic-app-how-to-escape-data?forum=azurelogicapps 上的这篇文章没有帮助,因为这样做会违反消息消费服务的请求协定
是否需要字符串化消息包含开始和结束双引号?
我试过这个,它对我有用。
- 我将 JSON 对象作为撰写的输出
- 然后,我使用转义字符串化 JSON 的 Base64 编码值初始化了一个变量(您需要添加所需的所有正确转义,我的只是一个 PoC(
然后,将 Base64 中已有的变量发送到服务总线(需要删除该操作上的编码(。
"actions": { "Compose_JSON_Object": { "inputs": { "message": "I want this as a string" }, "runAfter": {}, "type": "Compose" }, "Initialise_Variable_with_Stringified_JSON_Base64_Encoded": { "inputs": { "variables": [ { "name": "jsonAsStringBase64", "type": "String", "value": "@base64(concat('"', replace(string(outputs('Compose_JSON_Object')), '"', '\"'), '"'))" } ] }, "runAfter": { "Compose_JSON_Object": [ "Succeeded" ] }, "type": "InitializeVariable" }, "Send_message": { "inputs": { "body": { "ContentData": "@variables('jsonAsStringBase64')", "ContentType": "text/plain" }, "host": { "connection": { "name": "@parameters('$connections')['servicebus']['connectionId']" } }, "method": "post", "path": "/@{encodeURIComponent(encodeURIComponent('temp'))}/messages", "queries": { "systemProperties": "None" } }, "runAfter": { "Initialise_Variable_with_Stringified_JSON_Base64_Encoded": [ "Succeeded" ] }, "type": "ApiConnection" } },
这样,我得到了字符串化的消息。
呵呵