public IRequest Marshall(CreateInvalidationRequest createInvalidationRequest)
        {
            IRequest request = new DefaultRequest(createInvalidationRequest, "AmazonCloudFront");



            request.HttpMethod = "POST";
            string uriResourcePath = "2014-01-31/distribution/{DistributionId}/invalidation";

            uriResourcePath      = uriResourcePath.Replace("{DistributionId}", createInvalidationRequest.IsSetDistributionId() ? createInvalidationRequest.DistributionId.ToString() : "");
            request.ResourcePath = uriResourcePath;


            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings()
            {
                Encoding = System.Text.Encoding.UTF8, OmitXmlDeclaration = true
            }))
            {
                if (createInvalidationRequest != null)
                {
                    InvalidationBatch invalidationBatchInvalidationBatch = createInvalidationRequest.InvalidationBatch;
                    if (invalidationBatchInvalidationBatch != null)
                    {
                        xmlWriter.WriteStartElement("InvalidationBatch", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                        if (invalidationBatchInvalidationBatch != null)
                        {
                            Paths pathsPaths = invalidationBatchInvalidationBatch.Paths;
                            if (pathsPaths != null)
                            {
                                xmlWriter.WriteStartElement("Paths", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                                if (pathsPaths.IsSetQuantity())
                                {
                                    xmlWriter.WriteElementString("Quantity", "http://cloudfront.amazonaws.com/doc/2014-01-31/", pathsPaths.Quantity.ToString(CultureInfo.InvariantCulture));
                                }

                                if (pathsPaths != null)
                                {
                                    List <string> pathsPathsitemsList = pathsPaths.Items;
                                    if (pathsPathsitemsList != null && pathsPathsitemsList.Count > 0)
                                    {
                                        int pathsPathsitemsListIndex = 1;
                                        xmlWriter.WriteStartElement("Items", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                                        foreach (string pathsPathsitemsListValue in pathsPathsitemsList)
                                        {
                                            xmlWriter.WriteStartElement("Path", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                                            xmlWriter.WriteValue(pathsPathsitemsListValue);
                                            xmlWriter.WriteEndElement();


                                            pathsPathsitemsListIndex++;
                                        }
                                        xmlWriter.WriteEndElement();
                                    }
                                }
                                xmlWriter.WriteEndElement();
                            }
                        }
                        if (invalidationBatchInvalidationBatch.IsSetCallerReference())
                        {
                            xmlWriter.WriteElementString("CallerReference", "http://cloudfront.amazonaws.com/doc/2014-01-31/", invalidationBatchInvalidationBatch.CallerReference.ToString(CultureInfo.InvariantCulture));
                        }
                        xmlWriter.WriteEndElement();
                    }
                }
            }
            try
            {
                string content = stringWriter.ToString();
                request.Content = System.Text.Encoding.UTF8.GetBytes(content);
                request.Headers["Content-Type"] = "application/xml";
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", e);
            }


            return(request);
        }
Esempio n. 2
0
        public IRequest Marshall(CreateInvalidationRequest createInvalidationRequest)
        {
            IRequest request = new DefaultRequest(createInvalidationRequest, "AmazonCloudFront");



            request.HttpMethod = "POST";

            string uriResourcePath = "2013-09-27/distribution/{DistributionId}/invalidation";

            uriResourcePath = uriResourcePath.Replace("{DistributionId}", createInvalidationRequest.DistributionId ?? "");

            if (uriResourcePath.Contains("?"))
            {
                string queryString = uriResourcePath.Substring(uriResourcePath.IndexOf("?") + 1);
                uriResourcePath = uriResourcePath.Substring(0, uriResourcePath.IndexOf("?"));

                foreach (string s in queryString.Split('&', ';'))
                {
                    string[] nameValuePair = s.Split('=');
                    if (nameValuePair.Length == 2 && nameValuePair[1].Length > 0)
                    {
                        request.Parameters.Add(nameValuePair[0], nameValuePair[1]);
                    }
                    else
                    {
                        request.Parameters.Add(nameValuePair[0], null);
                    }
                }
            }

            request.ResourcePath = uriResourcePath;


            StringWriter  stringWriter = new StringWriter();
            XmlTextWriter xmlWriter    = new XmlTextWriter(stringWriter);

            xmlWriter.Namespaces = true;

            if (createInvalidationRequest != null)
            {
                InvalidationBatch invalidationBatchInvalidationBatch = createInvalidationRequest.InvalidationBatch;
                if (invalidationBatchInvalidationBatch != null)
                {
                    xmlWriter.WriteStartElement("InvalidationBatch", "http://cloudfront.amazonaws.com/doc/2013-09-27/");
                    if (invalidationBatchInvalidationBatch != null)
                    {
                        Paths pathsPaths = invalidationBatchInvalidationBatch.Paths;
                        if (pathsPaths != null)
                        {
                            xmlWriter.WriteStartElement("Paths", "http://cloudfront.amazonaws.com/doc/2013-09-27/");
                            if (pathsPaths.IsSetQuantity())
                            {
                                xmlWriter.WriteElementString("Quantity", "http://cloudfront.amazonaws.com/doc/2013-09-27/", pathsPaths.Quantity.ToString());
                            }

                            if (pathsPaths != null)
                            {
                                List <string> pathsPathsitemsList = pathsPaths.Items;
                                if (pathsPathsitemsList != null && pathsPathsitemsList.Count > 0)
                                {
                                    int pathsPathsitemsListIndex = 1;
                                    xmlWriter.WriteStartElement("Items", "http://cloudfront.amazonaws.com/doc/2013-09-27/");
                                    foreach (string pathsPathsitemsListValue in pathsPathsitemsList)
                                    {
                                        xmlWriter.WriteStartElement("Path", "http://cloudfront.amazonaws.com/doc/2013-09-27/");
                                        xmlWriter.WriteValue(pathsPathsitemsListValue);
                                        xmlWriter.WriteEndElement();


                                        pathsPathsitemsListIndex++;
                                    }
                                    xmlWriter.WriteEndElement();
                                }
                            }
                            xmlWriter.WriteEndElement();
                        }
                    }
                    if (invalidationBatchInvalidationBatch.IsSetCallerReference())
                    {
                        xmlWriter.WriteElementString("CallerReference", "http://cloudfront.amazonaws.com/doc/2013-09-27/", invalidationBatchInvalidationBatch.CallerReference.ToString());
                    }
                    xmlWriter.WriteEndElement();
                }
            }


            try
            {
                request.Content = System.Text.Encoding.UTF8.GetBytes(stringWriter.ToString());
                request.Headers.Add("Content-Type", "application/xml");
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", e);
            }


            return(request);
        }
        /// <summary>
        /// Invalidates objects from a CloudFront distribution.
        /// </summary>
        /// <param name="distributionId">The distribution to invalidate objects from.</param>
        /// <param name="items">The path of the objects to invalidate.</param>
        /// <param name="reference">A unique name that ensures the request can't be replayed.</param>
        /// <param name="settings">The <see cref="CloudFrontSettings"/> required to connect to Amazon CloudFront.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public async Task <string> CreateInvalidation(string distributionId, IList <string> items, string reference, CloudFrontSettings settings, CancellationToken cancellationToken = default(CancellationToken))
        {
            //Get Reference
            if (String.IsNullOrEmpty(reference))
            {
                reference = DateTime.Now.Ticks.ToString();
            }



            //Correct Paths
            List <string> paths = new List <string>();

            foreach (string item in items)
            {
                if (!item.StartsWith("/"))
                {
                    paths.Add("/" + item);
                }
            }



            //Create Request
            InvalidationBatch batch = new InvalidationBatch()
            {
                Paths = new Paths()
                {
                    Items    = paths.ToList(),
                    Quantity = items.Count
                },

                CallerReference = reference
            };

            CreateInvalidationRequest request = new CreateInvalidationRequest()
            {
                DistributionId    = distributionId,
                InvalidationBatch = batch
            };



            //Send Request
            _Log.Verbose("Create Invalidation {0}", distributionId);

            AmazonCloudFrontClient client = this.GetClient(settings);

            CreateInvalidationResponse response = await client.CreateInvalidationAsync(request);

            if (response.HttpStatusCode == System.Net.HttpStatusCode.Created)
            {
                return(response.Invalidation.Id);
            }
            else
            {
                _Log.Error("Error invalidating object {0}", distributionId);

                return("");
            }
        }