簡體   English   中英

在C#中嵌套HttpWebRequest

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM