概要
Azure Functionの.NETで、HTTPトリガーのプロジェクトを作成したのですが、
その時に、ファイルとJSONデータを両方受け取るやり方について調べたので備忘録として残します。
ファイルとJSONデータを受け取る実装方法
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
// jsonDataキーに入っているjsonDataを取得
var jsonData = req.Form["jsonData"];
// ファイルをIFormFileとして取得する。
IFormFile file = req.Form.Files["file"];
return new OkObjectResult("");
}
実装方法としては、
デフォルトでRunメソッドで設定されているHttpRequestのオブジェクトを使って取得します。
※プロジェクトの作成方法によっては、デフォルトはHttpRequestDataとかになるかもしれませんので、そこは適宜修正します。
JSONデータの取得は、HttpRequestのFormを使って取得できます。そこで指定したキーの中身が、JSONデータであれば、JSONデシリアライズなどをして、きれいなオブジェクトなどにしてもらえればと思います。
ファイルの取得はHttpRequestのForm.Filesを使って、IFormFileとして取得します。
IFormFileに変換できれば、そのクラスのメソッドなどを使って、MemoryStreamなどに変換して、使いやすい形にして、使う感じです。
ファイルとJSONデータを送信して実行してみる
実行方法は、Postmanだと以下のような感じです。
form-data形式でファイルと、テキストデータを送ります。
1つのキーに、JSONデータを設定すれば、プログラム側でその値を使ってデシリアライズなどでオブジェクトクラスなどに変換すれば、管理しやすいです。
