Azure Logic App: How to save HTTP Connector's body content to OneDrive file?

落爺英雄遲暮 提交于 2020-01-06 06:35:13

问题


I have a simple Azure Logic App with the following components:

  • Recurrence
  • HTTP Get from HTTPS url

I've tried to configure the next component to save the HTTP response body to OneDrive with OneDrive Connector configured as follows:

  • FilePath: ApiTest/test.json
  • Content: @{body('http')}
  • Content Transfer Encoding: None

This gives the following error:

{"code":"InvalidTemplate","message":"Unable to process template language expressions in action 'microsoftonedriveconnector' inputs at line '1' and column '11': 'Template language expression cannot be evaluated: one of string interpolation segment value has unsupported type 'Object'. Please convert the value to string using the 'string()' function.'."}

If I then use @{string(body('http'))} I get:

{"code":"InvalidTemplate","message":"Unable to process template language expressions in action 'microsoftonedriveconnector' inputs at line '1' and column '11': 'The template language function 'string' was invoked with an invalid parameter. The value cannot be converted to the target type.'."}

How can I use the body of HTTP Connector and save it to One Drive?


回答1:


I don't have an answer, but I am wrestling with this very issue right now. I will post if I find a solution and would be very interested in case any one else finds a solution. I do find one thing interesting. There is a header and body option on the consuming end of my Http Connector which works when it runs. The error (as the above poster notes) occurs when passing that value to the next card. But, when I look at the output (link) on the run tab, I see a json value for the header and for the body. Does this need to be wrapped in a json parser?




回答2:


This works for me just fine and generated the file in the /random/test.txt folder, however I believe the problem in your case is that you are downloading a JSON file which is causing it to be interpreted as an object by the engine. I'll follow up with the team and maybe we need a "ToJson" call, or a way to "Passthrough", or make "String" more "flexible" (though that could be weird).

                "fileContent": {
                    "Content": "@{body('http')}",
                    "ContentTransferEncoding": "None"
                },

Actions in code view looks like:

"http": {
        "type": "Http",
        "inputs": {
            "method": "GET",
            "uri": "http://www.carlosag.net/"
        },
        "conditions": []
    },
    "microsoftonedriveconnector": {
        "type": "ApiApp",
        "inputs": {
            "apiVersion": "2015-01-14",
            "host": {
                "id": "/subscriptions/xxx/resourceGroups/zzz/providers/Microsoft.AppService/apiApps/MicrosoftOneDriveConnector",
                "gateway": "https://yyy.azurewebsites.net"
            },
            "operation": "UploadFile",
            "parameters": {
                "filePath": "random/test.json",
                "fileContent": {
                    "Content": "@{body('http')}",
                    "ContentTransferEncoding": "None"
                },
                "overwrite": true
            },
            "authentication": {
                "type": "Raw",
                "scheme": "Zumo",
                "parameter": "@parameters('/subscriptions/...')"
            }
        },



回答3:


You should try "@body('http')". I believe this will work. "@{body('http')}" is a form of string interpolation: expected output value is string and not a JSON.



来源:https://stackoverflow.com/questions/30501428/azure-logic-app-how-to-save-http-connectors-body-content-to-onedrive-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!