基本的な HTTP GET と POST を実行する必要がある C# 2.0 コードをいくつか書いています。System.Net.HttpWebRequest を使用して両方のタイプのリクエストを送信し、System.Net.HttpWebResponse を使用して両方を受信しています。GET の私のコードは次のようになります。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Format("{0}?{1}",
URLToHit,
queryString));
request.Method = "GET";
request.Timeout = 1000; // set 1 sec. timeout
request.ProtocolVersion = HttpVersion.Version11; // use HTTP 1.1
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}
catch(WebException e)
{
// If I do anything except swallow the exception here,
// I end up in some sort of endless loop in which the same WebException
// keeps being re-thrown by the GetResponse method. The exception is always
// right (ie: in cases when I'm not connected to a network, it gives a
// timed out error, etc...), but it should not be re-thrown!
}
そして、私の POST コードは非常に似ています。
URLToHit が HTTP ステータス 200 を返した場合、最後の行は正常に機能しますが、他の状況 (つまり、HTTP ステータスが 200 でない、ネットワーク接続がないなど) では、System.Net.WebException がスローされます (これは想定どおりです)。 MSDN ドキュメントに)。ただし、私のコードはその行を超えて進行することはありません。
これをデバッグしようとすると、ステップオーバーしたり、最後の行を超えて続行したりできないことがわかりました。そうしようとすると、リクエストが再発行され、例外が再スローされます。
リクエストを一度だけ発行するために私ができることについてのアイデアはありますか? 例外ベースのコードでこのようなことが起こるのを見たことがなく、アイデアがありません。私のコードの他の部分では、このようなことは何も起こらず、System.Net の機能と構造を扱う部分だけです。
ありがとう!
(更新: GetRequest メソッドに try/catch を追加)