使用'使用'而不是关闭WebResponse和StreamReader是否安全

Ric*_*ard 16 c# httpwebrequest streamreader

目前

我为HttpWebRequest被调用实现了一个简单的帮助方法GetResponse(url).目前,我手动关闭WebResponseStreamReader读取结果之后.然后我就这样返回结果:

// construct the request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";

// get the result
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string result = reader.ReadToEnd();

// clean up and return the result
reader.Close();
response.Close();
return result;
Run Code Online (Sandbox Code Playgroud)

建议

在陈述中包含回报而不是关闭它们是否安全using ; 这会和.Close()es 有同样的效果吗?

// construct the request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";

// get the result
using (WebResponse response = request.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
    {
        return reader.ReadToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 24

这不仅安全 - 它比原始安全更安全,因为即使抛出异常,它也会处理掉对象; 一个using说法是相当于try/ finally声明.

通常,无论何时显式写入Close()Dispose()调用,都要考虑是否可以使用using语句.

(请注意,顺便说一下,您没有使用Web响应中的编码 - 您总是假设使用UTF-8.WebClient相反,使用它可以使这更简单,如果这是一个选项.)