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;
}
}
いくつかの回答の誤解に基づく明確化のため:
この行はnotであり、警告が発生しています。
using (var response = request.GetResponse() as HttpWebResponse)
この行is警告が発生している場所:
var reader = new StreamReader(response.GetResponseStream());
var reader = new StreamReader(response.GetResponseStream());
StreamReader
コンストラクターのパラメーターにnotnull
属性があると思います。以下を試してください:
var stream = response.GetResponseStream();
if (stream == null)
// throw an exception
var reader = new StreamReader(stream);
コードを短くして、使い捨てリソースを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/")
}
response
オブジェクトのタイプがHttpWebRequest
の場合、応答は常にタイプHttpWebResponse
になります。そうでない場合、それは決してありません。
これを間違った場所でテストしている(結果を破棄するためにWebRequest
によって派生した別のクラスを渡すことができるのに、なぜ.GetResponse()
を呼び出すのか)か、効果なしで不要なテストを行っています。
その下のnullのテストにもかかわらず、リシャーパーがそれを心配していると思います。私は直接キャストに行くでしょう:
using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();
または、HttpWebResponse
から派生していないWebResponse
のメンバーを使用していないことを考えると、キャストはまったく行われません。
using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();