首页 > 解决方案 > c#中的嵌套HttpWebRequest

问题描述

[HTTPWEBREQUEST 1] https://1drv.ms/u/s!AtL5uCkGy1ERgbEWHlNApMtROuP_0Q

[HTTPWEBREQUEST 2] https://1drv.ms/u/s!AtL5uCkGy1ERgbEXlHjqHdho3lUjfw

当我尝试第二次调用 withing main HttpWebRequest1 和嵌套的 HttpWebRequest2 时,它运行良好。但是在嵌套的 HttpWebRequest2 的第二次运行中,我在第二次运行时在 THIS line(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());
            }

标签: c#httprequest

解决方案


您创建的两个HttpWebRequest对象是该类的不同实例;您无需在使用另一个时关闭或重置其中一个。

如果 API 遵循约定,则401错误的含义正是消息所说的:服务器认为第二个请求没有被授权访问该端点。也许服务器具有获取用户列表所需的不同权限。Authorization: Bearer服务器通过您发送的令牌识别请求和权限。查看其他方法来测试该令牌并从该端点请求数据。


推荐阅读