簡體   English   中英

如何從Azure Logic App將文件傳遞給API

[英]How to pass a file to an API from Azure Logic App

我有一個簡單的邏輯應用程序。 觸發器在新文件上(例如:Dropbox,OneNote等)我想將文件名和fileContent傳遞給API APP(web Api)。 但我得到錯誤,或者更糟糕的是,API中的內容為null!

API在C#中。

如何從Logic App傳遞文件(例如:pdf,png)和API

更新:

在Logic App中我的動作代碼:

"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為null

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

如果我不添加[FromBody] ,我就會收到錯誤。

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

在此輸入圖像描述

是的,您可以通過幾種不同的方法將二進制內容發送到您自己的API。 我們開箱即用的行動也使用了這一點。

如果要將二進制內容作為請求主體發送例如,來自邏輯應用程序的傳出請求可能具有二進制內容和image/png的內容類型標頭

在這種情況下,請求正文的招搖應該是二進制 - 或者:

{ "name": "body",
  "In": "body",
  "Schema": {
     "Type":"string",
     "Format": "binary"
  }  ... }

這應該告訴設計者請求體是二進制內容。 如果先前的操作或觸發器具有二進制數據(例如“將文件添加到FTP時”)並且您在正文中使用了該輸出,則它將在您的自定義API輸入中顯示為:

"Body": "@triggerBody()"

請注意,表達式(字符串插值)上沒有{}可以將二進制內容轉換為字符串。 這會向具有二進制內容的連接器發送傳出請求 - 因此您的控制器只需要接受二進制內容並根據需要遵守內容類型標頭。

如果要在JSON請求中發送二進制內容有時您不希望將二進制文件作為完整請求發送,而是作為另一個對象的屬性發送。 例如,人物對象可以在請求主體中具有名稱,地址和簡檔pic。 在這種情況下,我們建議將二進制內容作為base64 encdoded發送。 您可以在swagger中使用"format": "base64"來描述屬性。 在代碼視圖中看起來像:

"Body": {
 "Name": "@triggerBody()['Name']",
 "ProfilePic": "@base64(body('Dropbox'))"
}

希望有所幫助。 如果您有任何問題,請告訴我 - 這是一篇關於邏輯應用程序如何保留內容類型文章

我找到了怎么做。

我需要傳遞查詢字符串中的文件名和HTTP請求正文中的文件。 今天,使用設計視圖無法實現,因此您需要進入代碼視圖。

在Logic App代碼中

"queries": {
    "fileName": "@{triggerOutputs()['headers']['x-ms-file-name']}"
    },
"body": "@triggerBody()"

在API應用程序代碼中

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

   [...]
}

更詳細的解釋可以在這篇博文中找到: http//www.frankysnotes.com/2017/03/passing-file-from-azure-logic-app-to.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM