Xamarin Android httpwebrequest,无法访问已处置的对象

You*_*dir 7 c# post android webrequest xamarin

我有一个Android移动应用程序,我想发送webrequest到服务器发布一些数据,但在发布数据之前,我发送一个http获取请求获取一些数据,然后发送邮件请求,首先我收到成功,但当我发送邮件请求它会抛出我的代码的这行代价 requestStream.Write(bytes, 0, bytes.Length);

例外是:

System.ObjectDisposedException:无法访问已处置的对象.对象名:'System.Net.Sockets.NetworkStream'.

这是我的获取和发布请求代码GET:

public void GetTokenInfo()
        {

            try
            {
                var uri = new Uri(string.Format(_host + "webserver/SesTokInfo", string.Empty));
                var webRequest = WebRequest.Create(uri);
                using (var response = webRequest.GetResponse() as HttpWebResponse)
                {
                    using (var requestStream = response.GetResponseStream())
                    {
                        using (var reader = new StreamReader(requestStream))
                        {
                            var content = reader.ReadToEnd();
                            XmlDocument xDocument = new XmlDocument();
                            xDocument.LoadXml(content);
                            XmlElement root = xDocument.DocumentElement;
                            if (IsResponseReturned(root))
                            {
                                GlobalConfig.SessionId = root.GetElementsByTagName("SesInfo")[0].InnerText;
                                GlobalConfig.Token = root.GetElementsByTagName("TokInfo")[0].InnerText;

                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception);
            }
        }
Run Code Online (Sandbox Code Playgroud)

使用此代码我得到的结果没有任何问题,这是我的POST:

 public WebResponse PostData(string body, string url)
        {
            WebResponse webResponse = null;
            try
            {
                var uri = new Uri(string.Format(_host + url, string.Empty));
                var webRequest = (HttpWebRequest)WebRequest.Create(uri);
                webRequest.Headers.Add("Cookie",
                    GlobalConfig.SessionId);
                webRequest.Headers.Add("_RequestVerificationToken", GlobalConfig.Token);
                webRequest.Method = "POST";
                webRequest.ContentType = "application/xml";
                byte[] bytes = Encoding.UTF8.GetBytes(body);
                webRequest.ContentLength = bytes.Length;
                Stream requestStream = webRequest.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                webResponse = webRequest.GetResponse();
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
            return webResponse;
        }
Run Code Online (Sandbox Code Playgroud)

我已经搜索并尝试了方法,但我没有得到解决方案,加上当我评论第一个函数,并且只运行第二个函数它将工作正常但是当我运行第一个然后第二个它抛出异常,做任何事情属于从第一个代码处置流和Web响应?我认为使用声明已经处理了它们.

任何帮助赞赏.

You*_*dir 1

在尝试了多种方法并阅读上面的答案并尝试后,我终于通过使两个代码如下所示解决了问题,获取一个:

                var uri = new Uri(string.Format(_host + "webserver/SesTokInfo", string.Empty));
                var webRequest = WebRequest.Create(uri);
                using (var response = webRequest.GetResponse() as HttpWebResponse)
                {
                    using (var reader = new StreamReader(response.GetResponseStream()))
                    {
                        var content = reader.ReadToEnd();
                        XmlDocument xDocument = new XmlDocument();
                        xDocument.LoadXml(content);
                        XmlElement root = xDocument.DocumentElement;
                        if (IsResponseReturned(root))
                        {
                            GlobalConfig.SessionId = root.GetElementsByTagName("SesInfo")[0].InnerText;
                            GlobalConfig.Token = root.GetElementsByTagName("TokInfo")[0].InnerText;

                        }
                    }
                }
Run Code Online (Sandbox Code Playgroud)

并发布一:

                var uri = new Uri(string.Format(_host + url, string.Empty));
                var webRequest2 = (HttpWebRequest)WebRequest.Create(uri);


                webRequest2.Headers.Add("Cookie",
                    GlobalConfig.SessionId);
                webRequest2.Headers.Add("_RequestVerificationToken", GlobalConfig.Token);
                webRequest2.Method = "POST";
                webRequest2.ContentType = "application/xml";

                byte[] bytes = Encoding.UTF8.GetBytes(body);
                webRequest2.ContentLength = bytes.Length;
                StreamWriter writer = new StreamWriter(webRequest2.GetRequestStream());
                writer.Write(bytes);
                webResponse = webRequest2.GetResponse();
Run Code Online (Sandbox Code Playgroud)

当我在 using 块内使用请求流时,它仍然会抛出异常,但如果没有 using 块,它会起作用:)