2017-03-16 23 views
1

私は単純なLogic Appを持っています。トリガーが新しいファイル(例:Dropbox、OneNoteなど)にあります。 ファイルAPPとファイル内容をAPI APP(web API)に渡したいとします。 しかし、私はエラーがある、または悪いことに、コンテンツはAPIで一度nullです!Azure Logic AppからAPIにファイルを渡す方法

APIはC#です。

どのようにファイル渡します(例:PDF、png)をすると、APIロジックアプリから

UPDATE:

ロジックアプリでここに私のアクションコード:

"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) 

enter image description here

答えて

1

私はその方法を見つけました。

クエリーストリングのファイル名とHTTPリクエストの本文のファイルを渡す必要がありました。今日では、デザインビューを使用することはできませんので、コードビューに移動する必要があります。

ロジックアプリケーションコードで

"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

2

はい、あなたは、いくつかの異なる方法で独自のAPIにバイナリコンテンツを送信することができます。私たちのすぐに使えるアクションでもこれを使用しています。あなたが要求本文としてバイナリコンテンツを送信する場合は

例えば、ロジックアプリケーションからの発信要求が、この場合闊歩でバイナリコンテンツとimage/png

のContent-Typeヘッダを持つことができます要求の本文がバイナリである必要があります - または:

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

これは、リクエストボディがバイナリコンテンツであることを伝える必要があります。

"Body": "@triggerBody()" 

注意:前のアクションやトリガーは、バイナリデータを持っていた(例えば、「ファイルをFTPに追加されたとき」)とあなたが身体にその出力を使用した場合、それは、あなたのカスタムAPI入力に現れるでしょうバイナリの内容を文字列に変換する式(文字列の補間)には{}がありません。これにより、バイナリコンテンツを持つコネクタに発信要求が送信されるため、コントローラはバイナリコンテンツを受け入れ、必要に応じてコンテンツタイプヘッダーを受け入れるだけで済みます。あなたはJSONリクエスト でバイナリコンテンツを送信する場合は

は、時には、完全な要求としてではなく、別のオブジェクトのプロパティとしてバイナリを送信する必要はありません。例えば、人物オブジェクトは、名前、住所、およびプロフィールのすべてを要求本文に持つことができます。この場合、バイナリコンテンツをbase64エンコードして送信することをおすすめします。 "format": "base64"をswaggerで使用すると、プロパティを以下のように記述できます。コードビューでは次のようになります。

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

希望するものがあります。ご不明な点がございましたら、article on how logic apps preserves content-typesもお知らせください。

+0

私はそれを試してみました...それは動作しません。 public HttpStatusCode UploadNewFile([FromBody] string filedata)の場合、filedataはnullです。私が[FromBody]を置かなければ、私はエラーを受けました。私の質問の更新版をチェックしてください。 –

+0

あなたにメールを送りました - このスレッドであなたが見つけたものを教えてください – jeffhollan

+0

はい、ありました。私は解決策の概要を共有するための新しい応答を追加し、さらにブログ記事でより詳細な点を指摘しています:http://www.frankysnotes.com/2017/03/passing-file-from-azure-logic-app- to.html –

関連する問題