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.");
}