Hello,
I am using the below code to programatically call an API and purge the cache requests. It works as is but I have a need to change this to an async method instead of sync. I tried to use the async..wait method below. Can you please see if it looks OK.
I am using the below code to programatically call an API and purge the cache requests. It works as is but I have a need to change this to an async method instead of sync. I tried to use the async..wait method below. Can you please see if it looks OK.
Sync Method:
using Akamai.EdgeGrid.Auth;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Configuration;
using System.Text;
using System.Net.Security;
using System.Net.Http;
using System.Threading.Tasks;
namespace AkamaiPurge
{
class Program
{
public class PurgeObject
{
[JsonProperty("objects")]
public string[] Objects { get; set; }
[JsonProperty("hostname")]
public string Hostname { get; set; }
}
static void Main(string[] args)
{
var urlv3 = new PurgeObject();
string[] paths = System.IO.File.ReadAllLines(@"urlpaths.txt");
urlv3.Objects = paths;
Console.WriteLine(paths.Length);
urlv3.Hostname = "example.com";
Purge(urlv3);
Console.ReadLine();
}
static WebResponse Purge(PurgeObject purgeObject)
{
var client_token = ConfigurationManager.AppSettings["client_token"];
var access_token = ConfigurationManager.AppSettings["access_token"];
var secret = ConfigurationManager.AppSettings["secret"];
var api_url = ConfigurationManager.AppSettings["api_url"];
var ccu_url = ConfigurationManager.AppSettings["ccu_url"];
ClientCredential credentials = new ClientCredential(client_token, access_token, secret);
EdgeGridV1Signer signer = new EdgeGridV1Signer(null, 100000);
Uri uri = new Uri(api_url + ccu_url);
WebRequest request = WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json";
// convert string to stream
var serializedObject = JsonConvert.SerializeObject(purgeObject);
Console.WriteLine(serializedObject);
byte[] byteArray = Encoding.UTF8.GetBytes(serializedObject);
MemoryStream uploadStream = new MemoryStream(byteArray);
try
{
// Signs the current request using the Akamai C# library. Creates an Authentication header for the request.
request = signer.Sign(request, credentials, uploadStream);
}
catch (Exception error)
{
Console.WriteLine("Error creating signature");
throw (error);
}
// avoid internal memory allocation before buffering the output
if (request is HttpWebRequest)
((HttpWebRequest)request).AllowWriteStreamBuffering = false;
using (Stream requestStream = request.GetRequestStream())
using (uploadStream)
uploadStream.CopyTo(requestStream, 1024 * 1024);
try
{
var httpResponse = (WebResponse)request.GetResponse();
using (Stream data = httpResponse.GetResponseStream())
using (var reader = new StreamReader(data))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
return httpResponse;
}
catch (WebException error)
{
using (WebResponse response = error.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
return error.Response;
}
}
}
}
Async Method:
using Akamai.EdgeGrid.Auth;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;
using System.Configuration;
using System.Text;
using System.Net.Security;
using System.Net.Http;
using System.Threading.Tasks;
namespace AkamaiPurge
{
class Program
{
public class PurgeObject
{
[JsonProperty("objects")]
public string[] Objects { get; set; }
[JsonProperty("hostname")]
public string Hostname { get; set; }
}
static async Task Main(string[] args)
{
var urlv3 = new PurgeObject();
string[] paths = System.IO.File.ReadAllLines(@"urlpaths.txt");
urlv3.Objects = paths;
Console.WriteLine(paths.Length);
urlv3.Hostname = "example.com";
await Purge(urlv3);
Console.ReadLine();
}
private static async Task<WebResponse> Purge(PurgeObject purgeObject)
{
var client_token = ConfigurationManager.AppSettings["client_token"];
var access_token = ConfigurationManager.AppSettings["access_token"];
var secret = ConfigurationManager.AppSettings["secret"];
var api_url = ConfigurationManager.AppSettings["api_url"];
var ccu_url = ConfigurationManager.AppSettings["ccu_url"];
ClientCredential credentials = new ClientCredential(client_token, access_token, secret);
EdgeGridV1Signer signer = new EdgeGridV1Signer(null, 100000);
Uri uri = new Uri(api_url + ccu_url);
WebRequest request = WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json";
// convert string to stream
var serializedObject = JsonConvert.SerializeObject(purgeObject);
Console.WriteLine(serializedObject);
byte[] byteArray = Encoding.UTF8.GetBytes(serializedObject);
MemoryStream uploadStream = new MemoryStream(byteArray);
try
{
// Signs the current request using the Akamai C# library. Creates an Authentication header for the request.
request = signer.Sign(request, credentials, uploadStream);
}
catch (Exception error)
{
Console.WriteLine("Error creating signature");
throw (error);
}
// avoid internal memory allocation before buffering the output
if (request is HttpWebRequest)
((HttpWebRequest)request).AllowWriteStreamBuffering = false;
using (Stream requestStream = request.GetRequestStream())
using (uploadStream)
uploadStream.CopyTo(requestStream, 1024 * 1024);
try
{
//var httpResponse = (WebResponse)request.GetResponse();
var httpResponse = await request.GetResponseAsync();
using (Stream data = httpResponse.GetResponseStream())
using (var reader = new StreamReader(data))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
return httpResponse;
}
catch (WebException error)
{
using (WebResponse response = error.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
return error.Response;
}
}
}
}
Last edited by a moderator: