public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log, ExecutionContext context) { // get the config _config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables() .Build(); // Get request body var body = await new StreamReader(req.Body).ReadToEndAsync(); if (body == null) { return(new BadRequestObjectResult("No body found")); } // deserialize the payload var data = Newtonsoft.Json.JsonConvert.DeserializeObject <ImageUpload>(body); if (data.Imageb64 == null) { return(new BadRequestObjectResult("No 'imageb64' property found in body")); } // get the base64 image var img = data.Imageb64; // convert to byte array byte[] buffer = new byte[0]; try { buffer = Convert.FromBase64String(img.ToString()); } catch { return(new BadRequestObjectResult("unable to read 'imageb64' data")); } // Upload to blob storage if (buffer.Length == 0) { return(new BadRequestObjectResult("unable to upload buffer with length of 0")); } else { log.LogInformation($"Received image of size {buffer.Length} bytes"); // add the image to blob storage and get the url string url = await BlobManager.AddOriginalImage(buffer); // add the image to table and get the id var imageEntity = await TableManager.AddOriginalImage(url); // send the image entity to event grid await EventGridManager.SendNewImageEvent(imageEntity); // return the details to the user return(new OkObjectResult(new ImageUploadResult { Id = imageEntity.RowKey, Url = url })); } }