【发布时间】:2017-08-16 13:34:31
【问题描述】:
我有一个 android 移动应用程序,我想向服务器发送 webrequest 以发布一些数据,但在发布数据之前我发送一个 http get 请求以获取一些数据,然后发送 post 请求,
首先我收到 get 成功,但是当我发送 post 请求时,它在我的代码requestStream.Write(bytes, 0, bytes.Length);
例外是:
System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'System.Net.Sockets.NetworkStream'。
这是我的获取和发布请求代码 获取:
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);
}
}
使用此代码,我可以毫无问题地收到我的结果,这是我的 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;
}
我已经搜索并尝试了方法,但我没有得到解决方案,而且当我评论第一个函数并且只运行第二个函数时它会正常工作,但是当我运行第一个然后第二个时它会抛出异常,是否有任何东西属于从第一个代码中处理流和 Web 响应? 我认为 using 语句已经处理了它们。
任何帮助表示赞赏。
【问题讨论】:
标签: c# android post xamarin webrequest