私はHttpWebRequestを使用してURLの存在を確認しようとしています。私は基本的にこれを行ういくつかの例を見つけました:URLは実際に壊れている場合なぜHttpWebRequestはHttpStatusCode.NotFoundを返す代わりに例外をスローしますか?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
しかし、それは代わりに例外を投げ、応答を返さないです。
私はこれに私のコードを変更:
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
}
catch (System.Net.WebException ex)
{
var response = ex.Response as HttpWebResponse;
return response == null ? HttpStatusCode.InternalServerError : response.StatusCode;
}
最終的に私はやりたいように思われました。
しかし、NotFoundステータスコードで応答を返す代わりに、リクエストが例外をスローするのはなぜですか。
これは、.Net Frameworkの作者の部分でこの悪いデザインの選択肢からHttpWebRequest/Responseを使用してコードを保存するための作業ではありませんが、正しい解決策は、4xxと5xxのステータスコードを投げないHttpClientを使用することです。例外は例外的な状況を想定したものであり、それをキャッチすることだけを投げて、パフォーマンスが悪くて悪いように進んでいます。 https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx –
これは当てはまりません。私はプロジェクトでHttpClientを使用していますが、404ステータスコードを返す存在しないURLを呼び出すと、クライアントは404ステータスコードで応答を返す代わりに例外をスローしています。これを防ぐためにhttpclientを使用するには余分なステップがありますか? – SelAromDotNet