如何从Azure Logic App将文件传递到API
我有一个简单的逻辑应用程序。触发器位于新文件上(例如:Dropbox、OneNote等) 我想将文件名和文件内容传递给API应用程序(web API)。 但是我得到了一个错误,或者更糟糕的是,一旦API中的内容为空 API是C语言的 如何将文件(例如:pdf、png)传递给Logic应用程序并从中传递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": {
"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]放进去,我就犯了一个错误。检查我的问题的更新版本。给你发了一封电子邮件-让我知道你发现了什么。是的。我添加了一个新的回复来分享解决方案的概述,并在博客上指出了一个更详细的回复: