如何解决“无法访问已处置对象 System.net.HttpWebResponse”?
How to solve " cannot access disposed object System.net.HttpWebResponse"?
我有一个可以调用服务器的控制台应用程序。我意识到我错过了将它放入 using 语句中,一旦我这样做了,我就一直收到这个错误:
"Cannot access a disposed object.\r\nObject name:
'System.Net.HttpWebResponse'."
在 google 之后我尝试了几次,其中之一是:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
在app.config
我仍然得到同样的错误,我不知道为什么,
我的代码:
public static HttpWebResponse CallServer(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
var webResp = (HttpWebResponse)null;
using (webResp = (HttpWebResponse)request.GetResponse())
{
}
return webResp;
}
我该如何解决这个问题?
您的 using (webResp ...)
导致响应被放置在 using
语句的结束括号中。之后访问响应将失败。
简单的解决方案是延迟处理 webResp
,直到您真正处理完它。您可以在接收方法中处理它 webResp
.
我想你应该创建一个 using
有点像这样的:
using (HttpWebResponse x = CallServer(url))
{ }
并删除 CallServer
方法中的 using
。
编译器将 using
语句翻译成如下形式:
HttpWebResponse webResp;
try
{
webResp = (HttpWebResponse)request.GetResponse();
}
finally
{
webResp.Dispose();
}
所以如果你想 return webResp
并在你的方法之外使用这个对象,你不能把它放在 using
语句中,因为 using
会 Dispose
对象。并且您不能使用已处置的对象(正如异常消息明确指出的那样)。
您可能希望将对 CallServer
的调用包装在 using
语句中:
using (HttpWebResponse webResp = CallServer("http://..."))
{
// do something with your response
}
我有一个可以调用服务器的控制台应用程序。我意识到我错过了将它放入 using 语句中,一旦我这样做了,我就一直收到这个错误:
"Cannot access a disposed object.\r\nObject name: 'System.Net.HttpWebResponse'."
在 google 之后我尝试了几次,其中之一是:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
在app.config
我仍然得到同样的错误,我不知道为什么, 我的代码:
public static HttpWebResponse CallServer(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
var webResp = (HttpWebResponse)null;
using (webResp = (HttpWebResponse)request.GetResponse())
{
}
return webResp;
}
我该如何解决这个问题?
您的 using (webResp ...)
导致响应被放置在 using
语句的结束括号中。之后访问响应将失败。
简单的解决方案是延迟处理 webResp
,直到您真正处理完它。您可以在接收方法中处理它 webResp
.
我想你应该创建一个 using
有点像这样的:
using (HttpWebResponse x = CallServer(url))
{ }
并删除 CallServer
方法中的 using
。
编译器将 using
语句翻译成如下形式:
HttpWebResponse webResp;
try
{
webResp = (HttpWebResponse)request.GetResponse();
}
finally
{
webResp.Dispose();
}
所以如果你想 return webResp
并在你的方法之外使用这个对象,你不能把它放在 using
语句中,因为 using
会 Dispose
对象。并且您不能使用已处置的对象(正如异常消息明确指出的那样)。
您可能希望将对 CallServer
的调用包装在 using
语句中:
using (HttpWebResponse webResp = CallServer("http://..."))
{
// do something with your response
}