Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Azure Logic App将文件传递到API_Api_Azure_Http Post_Azure Logic Apps_Azure Api Apps - Fatal编程技术网

如何从Azure Logic App将文件传递到API

如何从Azure Logic App将文件传递到API,api,azure,http-post,azure-logic-apps,azure-api-apps,Api,Azure,Http Post,Azure Logic Apps,Azure Api Apps,我有一个简单的逻辑应用程序。触发器位于新文件上(例如:Dropbox、OneNote等) 我想将文件名和文件内容传递给API应用程序(web API)。 但是我得到了一个错误,或者更糟糕的是,一旦API中的内容为空 API是C语言的 如何将文件(例如:pdf、png)传递给Logic应用程序并从中传递API 更新: 在逻辑应用程序中,我的操作代码: "UploadNewFile": { "inputs": { "method": "post", "queries": {

我有一个简单的逻辑应用程序。触发器位于新文件上(例如:Dropbox、OneNote等) 我想将文件名和文件内容传递给API应用程序(web API)。 但是我得到了一个错误,或者更糟糕的是,一旦API中的内容为空

API是C语言的

如何将文件(例如:pdf、png)传递给Logic应用程序并从中传递API

更新:

在逻辑应用程序中,我的操作代码:

"UploadNewFile": {
"inputs": {
    "method": "post",
    "queries": {
        "filedata": {
            "fileName":"@triggerOutputs()['headers']['x-ms-file-name']",
            "fileContent":"@base64(triggerBody())"
        }
    },
    "uri": "https://smartuseconnapiapp.azurewebsites.net/api/UploadNewFile"
},
"metadata": {
    "apiDefinitionUrl": "https://smartuseconnapiapp.azurewebsites.net/swagger/docs/v1",
    "swaggerSource": "website"
},
"runAfter": {},
"type": "Http"
}

在我的API应用程序中,如果函数是这样声明的
filedata
则为空

[Route("api/UploadNewFile")]
[HttpPost]
public HttpStatusCode UploadNewFile([FromBody] string filedata)
如果我没有像那样添加
[FromBody]
,我就会出错

[Route("api/UploadNewFile")]
[HttpPost]
public HttpStatusCode UploadNewFile(string filedata)

是的,您可以通过几种不同的方法将二进制内容发送到自己的API。我们的开箱即用行动也使用这一点

如果要将二进制内容作为请求正文发送 例如,来自Logic应用程序的传出请求可能包含二进制内容和
image/png

在这种情况下,请求主体的招摇过市应该是二进制的,或者:

{ "name": "body",
  "In": "body",
  "Schema": {
     "Type":"string",
     "Format": "binary"
  }  ... }
这应该告诉设计器请求主体是二进制内容。如果以前的操作或触发器具有二进制数据(例如,“当文件被添加到FTP时”),并且您在正文中使用了该输出,则它将在自定义API输入中显示为:

"Body": "@triggerBody()"
请注意,表达式(字符串插值)上没有将二进制内容转换为字符串的
{
}
。这将向连接器发送一个带有二进制内容的传出请求,因此控制器只需要接受二进制内容并根据需要接受内容类型头

如果要在JSON请求中发送二进制内容 有时,您不希望将二进制文件作为完整请求发送,而是作为另一个对象的属性发送。例如,person对象可能在请求正文中包含名称、地址和概要文件。在这种情况下,我们建议将二进制内容作为
base64
encdodded发送。您可以在swagger中使用
“format”:“base64”
来描述如下属性。在“代码”视图中,将类似于:

"Body": {
 "Name": "@triggerBody()['Name']",
 "ProfilePic": "@base64(body('Dropbox'))"
}
希望有帮助。如果您有任何问题,请告诉我-这里还有一个问题。

我找到了解决方法

我需要在querystring中传递文件名,并在HTTP请求体中传递文件。今天,使用设计视图是不可能的,所以您需要进入代码视图

在逻辑应用程序代码中

"queries": {
    "fileName": "@{triggerOutputs()['headers']['x-ms-file-name']}"
    },
"body": "@triggerBody()"
在API应用程序代码中

public HttpResponseMessage UploadNewFile([FromUri] string fileName)
{
   var filebytes = Request.Content.ReadAsByteArrayAsync();

   [...]
}
在这篇博文中可以找到更详细的解释:

我已经试过了。。。但它不起作用。public HttpStatusCode UploadNewFile([FromBody]string filedata),则filedata为空。如果我不把[FromBody]放进去,我就犯了一个错误。检查我的问题的更新版本。给你发了一封电子邮件-让我知道你发现了什么。是的。我添加了一个新的回复来分享解决方案的概述,并在博客上指出了一个更详细的回复: