[英]Nested HttpWebRequest in c#
[HTTPWEBREQUEST 1] https://1drv.ms/u/s!AtL5uCkGy1ERgbEWHlNApMtROuP_0Q
[HTTPWEBREQUEST 2] https://1drv.ms/u/s!AtL5uCkGy1ERgbEXlHjqHdho3lUjfw
當我第二次嘗試用main調用HttpWebRequest1和嵌套的HttpWebRequest2時,它運行良好。 但是在嵌套的HttpWebRequest2的第二次運行中,我在第二次運行的THIS行上遇到了異常(System.IO.StreamReader sr2 = new System.IO.StreamReader(s2))。 異常:>“消息=”流不可讀。
try
{
HttpWebRequest WebRequestObjectCards = (HttpWebRequest)HttpWebRequest.Create("https://api.ucy.ac.cy/api/v1/cards?status=Valid&");
HttpWebRequest WebRequestObjectUsers = (HttpWebRequest)HttpWebRequest.Create("https://api.ucy.ac.cy/api/v1/users/" + ucy_id);
if (WebRequestObjectCards != null && WebRequestObjectUsers != null)
{
WebRequestObjectCards.Method = "GET";
WebRequestObjectCards.Timeout = 12000;
WebRequestObjectCards.ContentType = "application/json";
WebRequestObjectCards.Headers.Add("Authorization", "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
WebRequestObjectCards.KeepAlive = true;
WebRequestObjectUsers.Method = "GET";
WebRequestObjectUsers.Timeout = 12000;
WebRequestObjectUsers.ContentType = "application/json";
WebRequestObjectUsers.Headers.Add("Authorization", "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
WebRequestObjectUsers.KeepAlive = true;
using (System.IO.Stream s = WebRequestObjectCards.GetResponse().GetResponseStream())
{
using (System.IO.StreamReader sr = new System.IO.StreamReader(s))
{
var jsonResponse = sr.ReadToEnd();
var serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue; // The value of this constant is 2,147,483,647
Students UCYstudents = serializer.Deserialize<Students>(jsonResponse);
//String to be added in csv
var csv = new StringBuilder();
//prepare CSV Header
newLine = string.Format("***StartOfFile***");
csv.AppendLine(newLine);
newLine = string.Format("ID; FirstName; LastName; RFIDUID; PrintedCardNumber; ValidUntil; Enabled; email; group ");
csv.AppendLine(newLine);
//deserialize JSON to CSV
foreach (var item in UCYstudents.data)
{
if (item.ucy_id != null)
{
ucy_id = item.ucy_id;// used as parameter for WebRequestObjectUsers
ID = item.ucy_id.ToString().TrimStart('0');
RFIDUID = item.card_number.ToString().TrimStart('0');
PrintedCardNumber = item.card_number.ToString().TrimStart('0');
if (item.expiration_date != null)
{
ValidUntil = item.expiration_date.ToString().Replace("-30","-01");
dt = Convert.ToDateTime(ValidUntil);
ValidUntil = ("" + dt.Day + "." + dt.Month + "." + dt.Year);
}
else
{
ValidUntil = "";
}
Enabled = "TRUE";
//Getting response from WebRequestObjectUsers
using (System.IO.Stream s2 = WebRequestObjectUsers.GetResponse().GetResponseStream())
{
using (System.IO.StreamReader sr2 = new System.IO.StreamReader(s2))
{
serializer = new JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue; // The value of this constant is 2,147,483,647
jsonResponse = sr2.ReadToEnd();
Users UCYUser = serializer.Deserialize<Users>(jsonResponse);
FirstName = UCYUser.data.name_en.ToString();
LastName = UCYUser.data.surname_en.ToString();
email = UCYUser.data.mail.ToString();
group = "1";
//Write Fields to CSV File
newLine = string.Format("{0};{1};{2};{3};{4};{5};{6};{7};{8}", ID, FirstName, LastName, RFIDUID, PrintedCardNumber, ValidUntil, Enabled, email, group);
csv.AppendLine(newLine);
ID = "";
FirstName = "";
LastName = "";
RFIDUID = "";
PrintedCardNumber = "";
ValidUntil = "";
email = "";
group = "";
sr2.Close();
}
}
}
}
File.WriteAllText(@".\export.csv", csv.ToString(), Encoding.UTF8);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
您創建的兩個HttpWebRequest
對象是該類的不同實例。 您無需在使用另一個時關閉或重置其中一個。
如果API遵循約定,則401
錯誤將完全表明該消息的含義:服務器認為第二個請求未獲得訪問該端點的權限。 也許服務器具有獲取用戶列表所需的不同權限。 服務器通過您要發送的Authorization: Bearer
令牌來標識請求和權限。 查看其他方法來測試該令牌並從該端點請求數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.