我为HttpWebRequest
实现了一个名为GetResponse(url)
的简单辅助方法。目前,我在阅读结果后手动关闭WebResponse
和StreamReader
。然后我就这样返回结果:
// 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;
安全是否包含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();
}
}
答案 0 :(得分:23)
这不仅安全 - 它比原始安全更安全,因为即使抛出异常它也会处理掉对象; using
语句相当于try
/ finally
语句。
通常,只要您明确编写Close()
或Dispose()
来电,请考虑是否可以使用using
语句。
(请注意,顺便说一下,你没有使用网络响应中的编码 - 你总是假设使用UTF-8。如果是选项,使用WebClient
可以使这更简单。)< / p>
答案 1 :(得分:1)
using (StreamReader reader = new StreamReader())
{
// code
}
与
相同StreamReader reader;
try
{
reader = new StreamReader();
// code
}
finally
{
if (reader != null)
{
reader.Dispose();
}
}
因此它与您的代码几乎相同,但由于try / finally块而更安全。
答案 2 :(得分:1)
我建议这样做:
string ret = string.Empty;
using (WebResponse response = request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
ret = reader.ReadToEnd();
}
}
return ret;
使用“使用”是安全的,它会处理WebResponse和StreamReader,但不保证它会运行返回。