您好,
我正在使用以下代码以编程方式调用API并清除缓存请求。它按原样工作,但我需要将其更改为福彩12选5走势图方法而不是同步。我尝试使用下面的async..wait方法。你能看一下是否可以。
我正在使用以下代码以编程方式调用API并清除缓存请求。它按原样工作,但我需要将其更改为福彩12选5走势图方法而不是同步。我尝试使用下面的async..wait方法。你能看一下是否可以。
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;
}
}
}
}
由主持人最后编辑: