我正在尝试从http响应中获取状态代码,如下所示:
try
{
HttpWebRequest request = WebRequest.Create(requestURI) as HttpWebRequest;
string text
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
using (var responseStream = new StreamReader(response.GetResponseStream()))
{
text = responseStream.ReadToEnd();
}
var responseHeader = (HttpWebResponse)request.GetResponse();
var status = responseHeader.StatusCode;
}
catch (WebException ex)
{
MessageBox.Show(ex.ToString());
}
问题是我得到了这个例外:
System.ObjectDisposedException:“无法访问已删除的对象名称:'System.Net.HttpWebResponse'。”}
就在这一行:var status = responseHeader.StatusCode;
为什么会这样?我想获取状态代码和描述
答案 0 :(得分:3)
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
将在离开使用块后处理响应。
因此,对(HttpWebResponse)request.GetResponse();
的另一次调用将抛出异常。此外,因为它是一个网络响应,你不能读两次。
尝试这个替代方案:
HttpWebRequest request = WebRequest.Create(requestURI) as HttpWebRequest;
string text;
HttpStatusCode status;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
using (var responseStream = new StreamReader(response.GetResponseStream()))
{
text = responseStream.ReadToEnd();
status = response.StatusCode;
}