public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = "buildenvelope/{envelopeType}/{scenario}")] HttpRequest req, string envelopeType, string scenario, ILogger log) { // Get Request Details RequestDetails requestDetails = new RequestDetails(req, LogId); string logPrefix = $"{LogId}:{requestDetails.TrackingId}: "; // Add the tracking ID to the Response Headers if (!string.IsNullOrWhiteSpace(requestDetails.TrackingId)) { req.HttpContext.Response.Headers[HeaderConstants.AimTrackingId] = requestDetails.TrackingId; } log.LogDebug($"{logPrefix}Called with parameters envelopeType: {envelopeType}, scenario: {scenario}, messageContentType: {requestDetails.RequestContentType}, messageContentEncoding: {requestDetails.RequestContentEncoding}, messageTransferEncoding: {requestDetails.RequestTransferEncoding}, headerTrackingId: {requestDetails.TrackingId}, clearCache: {requestDetails.ClearCache}, enableTrace: {requestDetails.EnableTrace}"); envelopeType = envelopeType.ToLower(); // Validate the request IActionResult result = ValidateRequest(envelopeType, scenario, requestDetails, logPrefix, log); if (result != null) { return(result); } log.LogDebug($"{logPrefix}Request parameters are valid"); JObject envelope; // Switch by envelopeType switch (envelopeType) { case EnvelopeTypeAck: { log.LogDebug($"{logPrefix}Building an ACK envelope"); envelope = EnvelopeBuilder.BuildAckEnvelope(requestDetails); break; } case EnvelopeTypeNack: { log.LogDebug($"{logPrefix}Building a NACK envelope"); envelope = EnvelopeBuilder.BuildNackEnvelope(requestDetails); break; } case EnvelopeTypeDocument: { try { log.LogDebug($"{logPrefix}Building a Content envelope"); envelope = await BuildDocumentEnvelopeAsync(scenario, requestDetails, logPrefix, log); // Update the request TrackingId if need be requestDetails.UpdateTrackingId(envelope?["header"]?["properties"]?["trackingId"]?.Value <string>()); } catch (AzureResponseException arex) { // Exception occurred AzureResponseHelper.SetCustomResponseHeaders(req, arex); return(AzureResponseHelper.CreateFaultObjectResult("An AzureResponseException error occurred building a Document envelope", arex, logPrefix, log)); } catch (Exception ex) { // Exception occurred return(AzureResponseHelper.CreateFaultObjectResult(requestDetails, "An error occurred building a Document envelope", ex, logPrefix, log)); } break; } default: { // Invalid EnvelopeType return(AzureResponseHelper.CreateFaultObjectResult(requestDetails, $"Invalid envelopeType parameter supplied - must be one of {string.Join(", ", s_allowedEnvelopeTypes)}", logPrefix, log)); } } // Add TrackingId header if (!string.IsNullOrEmpty(requestDetails.TrackingId) && req?.HttpContext?.Response?.Headers?.ContainsKey(HeaderConstants.AimTrackingId) == false) { req?.HttpContext?.Response?.Headers?.Add(HeaderConstants.AimTrackingId, requestDetails.TrackingId); } log.LogDebug($"{logPrefix}Finished building envelope - returning response"); return(new OkObjectResult(envelope)); }