Esempio n. 1
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "convertjsontoxml")]
            HttpRequest req, 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 messageContentType: {requestDetails.RequestContentType}, messageContentEncoding: {requestDetails.RequestContentEncoding}, messageTransferEncoding: {requestDetails.RequestTransferEncoding}, headerTrackingId: {requestDetails.TrackingId}, clearCache: {requestDetails.ClearCache}, enableTrace: {requestDetails.EnableTrace}");

            string rootNode                      = req.Query["rootNode"];
            string rootNodeNamespace             = req.Query["rootNodeNamespace"];
            bool   writeArrayAttribute           = ((string)req.Query["writeArrayAttribute"] ?? "true") == "true";
            bool   encodeSpecialCharacters       = req.Query["encodeSpecialCharacters"] == "true";
            bool   addMessageBodyForEmptyMessage = req.Query["addMessageBodyForEmptyMessage"] == "true";

            string xmlBody = requestDetails.RequestBody;

            if (addMessageBodyForEmptyMessage && string.IsNullOrWhiteSpace(xmlBody))
            {
                xmlBody = "{}";
            }

            try
            {
                // Convert to XML
                XDocument xDocument = XmlHelper.ToXDocument(JsonConvert.DeserializeXmlNode(xmlBody, rootNode, writeArrayAttribute, encodeSpecialCharacters));
                if (!string.IsNullOrEmpty(rootNodeNamespace))
                {
                    xDocument = XmlHelper.AddNamespace(xDocument, "ns0", rootNodeNamespace);
                    xDocument = XmlHelper.UpdateRootQualifiedName(xDocument, "ns0");
                }

                // Special hack for XML content - OkObjectResult doesn't support XmlDocument in Functions at this time
                // without adding the XmlSerializerFormmatter to the list of services
                // See here: https://github.com/Azure/azure-functions-host/issues/2896
                return(await Task.FromResult <IActionResult>(new ContentResult()
                {
                    Content = xDocument.ToString(),
                    ContentType = "application/xml",
                    StatusCode = 200
                }));
            }
            catch (Exception ex)
            {
                return(await Task.FromResult <IActionResult>(AzureResponseHelper.CreateFaultObjectResult(requestDetails, $"An exception occurred trying to convert JSON to XML", ex, logPrefix, log)));
            }
        }