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