我在response.GetResponseStream()
收到此警告
我该怎么办呢?
// Get response
using (var response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
if (response != null)
{
var reader = new StreamReader(response.GetResponseStream());
var responseString = reader.ReadToEnd();
return responseString;
}
}
基于一些错误解释的答案清晰:
此行是不发生警告的地方:
using (var response = request.GetResponse() as HttpWebResponse)
这一行警告正在发生:
var reader = new StreamReader(response.GetResponseStream());
答案 0 :(得分:31)
var reader = new StreamReader(response.GetResponseStream());
我怀疑StreamReader
构造函数的参数具有notnull
属性。请尝试以下方法:
var stream = response.GetResponseStream();
if (stream == null)
// throw an exception
var reader = new StreamReader(stream);
答案 1 :(得分:6)
尝试缩短代码并在using
语句中包装一次性资源:
using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
甚至更进一步:
using (var client = new WebClient())
{
return client.DownloadString("http://foo.bar.com/")
}
答案 2 :(得分:1)
如果response
对象的类型为HttpWebRequest
,则响应将始终为HttpWebResponse
类型。如果不是,那就永远不会。
你要么在错误的地方进行测试(为什么要调用.GetResponse()
,如果你可以传递WebRequest
派生的另一个类只是为了扔掉结果),或者测试不必要的那些没有效果。 / p>
我猜resharper担心这一点,尽管在它下方测试了null。我会选择直接演员:
using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();
或者,考虑到您没有使用HttpWebResponse
的{{1}}成员,而不是来自WebResponse
的成员,根本没有演员:
using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();