C# System.ObjectDisposedException:&x27;无法访问已处置的对象。';

C# System.ObjectDisposedException:&x27;无法访问已处置的对象。';,c#,.net,visual-studio,.net-framework-version,C#,.net,Visual Studio,.net Framework Version,这是我连接到不受信任的服务器的代码,但我总是收到这个错误。我将代码放在using语句中,但它不工作。返回空字符串 以前也尝试过并查看此问题的链接,但它不起作用 private String requestAndResponse(String url) { string responseValue = string.Empty; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

这是我连接到不受信任的服务器的代码,但我总是收到这个错误。我将代码放在using语句中,但它不工作。返回空字符串 以前也尝试过并查看此问题的链接,但它不起作用

private String requestAndResponse(String url)
    {
        string responseValue = string.Empty;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

        request.Method = httpMethod.ToString();

        HttpWebResponse response = null;
        // for un trusted servers
        System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

        try
        {
            using (response = (HttpWebResponse)request.GetResponse())
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new ApplicationException("error code " + response.StatusCode.ToString());
                }
            }

            //process the response stream ..(json , html , etc..  )
            Encoding enc = System.Text.Encoding.GetEncoding(1252);
            StreamReader loResponseStream = new
                StreamReader(response.GetResponseStream(), enc);

            responseValue = loResponseStream.ReadToEnd();
            loResponseStream.Close();
            response.Close();
        }
        catch (Exception ex)
        {
            throw ex;
        }



        return responseValue;
    }

使用块的第一个
是处理您的响应。使用
语句将此块后的代码移动到
中。

在此行:

StreamReader loResponseStream = new StreamReader(response.GetResponseStream(), enc);
您正试图访问
响应
,但此对象已由
using
语句在前面处理

编辑:

此代码应该可以工作,处理所有对象并返回值:

using (HttpWebResponse  response = (HttpWebResponse)request.GetResponse())
{
    if (response.StatusCode != HttpStatusCode.OK)
    {
        throw new ApplicationException("error code " + response.StatusCode.ToString());
    }

    Encoding enc = System.Text.Encoding.GetEncoding(1252);

    using(StreamReader loResponseStream = new StreamReader(response.GetResponseStream(), enc))
    {
        return loResponseStream.ReadToEnd();
    }
}
允许从using语句返回,更多读取:

从网站上引用:

using语句确保即使在调用对象上的方法时发生异常,也会调用Dispose。通过将对象放在try块中,然后在finally块中调用Dispose,可以获得相同的结果;事实上,编译器就是这样翻译using语句的

看看这部分:

using (response = (HttpWebResponse)request.GetResponse())
{
    if (response.StatusCode != HttpStatusCode.OK)
    {
        throw new ApplicationException("error code " +      response.StatusCode.ToString());
    }
 }

//process the response stream ..(json , html , etc..  )
Encoding enc = System.Text.Encoding.GetEncoding(1252);
StreamReader loResponseStream = new
StreamReader(response.GetResponseStream(), enc);

在构建
流阅读器时,您正在访问
响应
,但这不在使用
语句的
范围之内。
using
语句将处理响应,因此会出现错误。

response
仅存在于
using
范围内……您试图在范围外访问它。将您的代码放入
using
范围内。@elmerdanta实际上不是,
response
在语句之前声明。您在using语句之外调用
GetResponseStream
。这肯定是坏的,你不应该指望它会起作用。我建议您编辑此问题,以便在
using
语句中显示包含此问题的代码,并更清楚地描述到底发生了什么,以及您采取了哪些步骤来诊断它。(您知道服务器正在返回数据吗?)也不清楚这与visual studio或.net framework版本标记有什么关系。@Abbas确实如此,但他正在调用
GetResponseStream
,该对象将只存在于
中,使用
@elmerdanta对象(已经)存在时,它只会被处理掉。这是两件不同的事情。