我有一个控制台应用程序,可以调用服务器。我意识到我错过了将其用于使用语句,一旦我这样做,我就一直收到这个错误:
"无法访问已处置的对象。\ r \ n对象名称: ' System.Net.HttpWebResponse'"
谷歌之后我尝试了几次尝试,其中之一是:
<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;
}
我该如何解决这个问题?
答案 0 :(得分:2)
您的using (webResp ...)
会将响应置于using
声明的结尾处。之后访问响应将失败。
简单的解决方案是延迟处理webResp
,直到您真正完成它为止。您可以在接收webResp
。
我想你应该创建一个using
,就像这样:
using (HttpWebResponse x = CallServer(url))
{ }
然后移除using
方法中的CallServer
。
答案 1 :(得分:1)
编译器将using
语句转换为如下内容:
HttpWebResponse webResp;
try
{
webResp = (HttpWebResponse)request.GetResponse();
}
finally
{
webResp.Dispose();
}
因此,如果您想返回webResp
并在方法之外使用此对象,则不得将其放在using
语句中,因为using
将Dispose
对象。并且您不能使用已处置的对象(正如异常消息明确指出的那样)。
您可能希望在CallServer
声明中将您的电话打包到using
:
using (HttpWebResponse webResp = CallServer("http://..."))
{
// do something with your response
}