下面是我的工作代码,一个一个地调用URL。
URL示例:(https://XXXX.YYYY.com/API/ZZ/students/“ + sAPIURL +” / applications“)将学生代码传递给API并获取API结果。API有一个参数是学生代码。
foreach (var sAPIURL in APILIST)
{
System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sAPIURL);
// Set the Method property of the request to GET.
request.Method = "GET";
string sUserNamePassword = sUserName + ":" + sPassword;
byte[] byteUserNamePassword = System.Text.ASCIIEncoding.ASCII.GetBytes(sUserNamePassword);
string encodedUserNamePassword = System.Convert.ToBase64String(byteUserNamePassword);
request.Accept = "application/json";
request.Headers.Add("Authorization", "Basic " + encodedUserNamePassword);
request.Headers.Add("aw-tenant-code", sAPIKEY);
//HttpWebResponse myHttpWebResponse = (HttpWebResponse)request.GetResponse();
System.Net.WebResponse response = request.GetResponse();
if (((System.Net.HttpWebResponse)response).StatusCode != HttpStatusCode.OK)
{
MessageBox.Show(((System.Net.HttpWebResponse)response).StatusDescription + "\r\n" + "Link: " + sURL);
}
//if (!((System.Net.HttpWebResponse)response.statuscode = 200))
//{
// //MsgBox(CType(response, System.Net.HttpWebResponse).StatusDescription);
// response.Close();
// return "Error";
//}
var dataStream = response.GetResponseStream();
var reader = new System.IO.StreamReader(dataStream);
sJSONData = reader.ReadToEnd();
// Close the Stream object.
dataStream.Close();
reader.Close();
response.Close();
return sJSONData;
}
var Maintasks = new[]
{
Task.Factory.StartNew(() => apiCall()),
Task.Factory.StartNew(() => apiCall()),
Task.Factory.StartNew(() => apiCall())
};
Task.WaitAll(Maintasks);
using var client = new HttpClient(); // init client
// set headers
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Basic", Convert.ToBase64String(
System.Text.Encoding.ASCII.GetBytes(
$"{username}:{password}")));
client.DefaultRequestHeaders.Add("aw-tenant-code", $"{key}");
// generate list of requests
var list = new List<Task<HttpResponseMessage>>();
for (int i = 0; i < 10; i++) // count of parallel requests or other GET requests
{
// add requests to the list of tasks
list.Add(client.GetAsync("https://www.google.com/"));
}
// all requests finished
await Task.WhenAll(list);
foreach (var task in list)
{
// get result per each request
var result = await task;
}
或者如果您想使用HttpRequestMessage
var list = new List<Task<HttpResponseMessage>>(); var httpRequestMessage = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri("some uri"), Headers = { // headers } }; for (int i = 0; i < 10; i++) { list.Add(client.SendAsync(httpRequestMessage)); } await Task.WhenAll(list); foreach (var task in list) { var result = await task; if (result.StatusCode == HttpStatusCode.OK) { // do something } // to read the content as string var stringResult = await result.Content.ReadAsStringAsync(); // to deserialize the content as some entity var someEntity = await result.Content.ReadAsAsync<MyCustomObject>(); }
注意:您的方法应该是async