最近まで、インターネット上にファイルが存在するかどうかを判断するために HttpWebRequest を使用していました。しかし今では、404 が存在しなくてもサーバーで処理でき、デフォルトの 404 サーバー エラー ページしか表示されないことに気付きました。このシナリオでは、HttpWebRequestは例外をスローしません。404 エラーが発生したかどうかを判断する方法が思いつきません。
何か案は?
最近まで、インターネット上にファイルが存在するかどうかを判断するために HttpWebRequest を使用していました。しかし今では、404 が存在しなくてもサーバーで処理でき、デフォルトの 404 サーバー エラー ページしか表示されないことに気付きました。このシナリオでは、HttpWebRequestは例外をスローしません。404 エラーが発生したかどうかを判断する方法が思いつきません。
何か案は?
StatusCode
のとを確認しStatusResponse
ますHttpWebResponse
。throw
受け取った値に基づいていつでもできます。
GetResponse
またはその非同期の同等物がスローしている場合は、をキャッチするとWebException
、便利なプロパティがいくつかあることがわかります。
特に、WebException.Responseは非常に便利です。
「ページが見つかりません」ページを返すサーバーで、ブラウザで存在しないファイルを取得して開発ツールを調べようとすると、リターン コードは依然として 404 Not Found です。
通常、メソッドが http 応答コードを返すことを期待しHttpWebRequest.GetResponse
ますが、代わりに.NET がhttp エラーの例外をスローします。
try {
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create("http://www.contoso.com");
using (HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse())
{
if (httpRes.StatusCode == HttpStatusCode.OK)
Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}", httpRes.StatusDescription);
// Releases the resources of the response.
httpRes.Close();
}
}
catch (WebException ex) {
Console.WriteLine("Error returned: {0}",ex.Response);
// can throw again here.
throw;
}