public static async Task Run()

in StackOverflow-Bot/DialogAnalyzerFunc/AnalyzeDialog.cs [45:123]


        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = "AnalyzeDialog")]HttpRequestMessage request, TraceWriter log)
        {
            try
            {
                MediaTypeHeaderValue contentType = request.Content.Headers.ContentType;

                // Check if content type is empty
                if (contentType == null)
                {
                    return request.CreateResponse(HttpStatusCode.BadRequest, "Missing content-type from header.");
                }

                // Check if content type is supported
                bool isJson = contentType.MediaType.Contains("application/json") == true;
                bool isOctetStream = contentType.MediaType.Contains("application/octet-stream") == true;

                if (isJson == false && isOctetStream == false)
                {
                    return request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType,
                        string.Format("Request's content type ({0}) is not supported.", string.Join(", ", contentType.MediaType)));
                }

                // Check if request body is empty
                if (request.Content.Headers.ContentLength == 0)
                {
                    return request.CreateResponse(HttpStatusCode.BadRequest, "No content found in the request.");
                }

                DialogAnalysisResult result;

                if (isJson == true)
                {
                    // Read content from request
                    RequestBody requestBody = await request.Content.ReadAsAsync<RequestBody>();

                    // Verify content contains a valid image uri
                    if (requestBody.ImageUri == null || requestBody.ImageUri.IsAbsoluteUri == false)
                    {
                        return request.CreateResponse(HttpStatusCode.BadRequest, "Image uri is not initialized or valid in the request content.");
                    }

                    result = await Client.AnalyzeDialogAsync(requestBody.ImageUri);
                }
                else
                {
                    byte[] imageData;

                    // Convert stream into byte data
                    using (Stream contentStream = await request.Content.ReadAsStreamAsync())
                    {
                        // Set stream position back to 0
                        contentStream.Position = 0;

                        // Using memory stream, create byte array
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
                            await contentStream.CopyToAsync(memoryStream);
                            imageData = memoryStream.ToArray();
                        }
                    }

                    if (imageData == null)
                    {
                        return request.CreateResponse(HttpStatusCode.BadRequest, "No binary file is found in the request content.");
                    }

                    result = await Client.AnalyzeDialogAsync(imageData);
                }

                // Return request response
                return request.CreateResponse(HttpStatusCode.OK, result);
            }
            catch (Exception ex)
            {
                log.Error("Exception hit when analyzing dialog.", ex);
            }

            return request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Failed to process request.");
        }