Solusi ini cukup bagus, tetapi mereka lupa bahwa mungkin ada kode status selain 200 OK. Ini adalah solusi yang saya gunakan di lingkungan produksi untuk pemantauan status dan semacamnya.
Jika ada pengalihan url atau beberapa kondisi lain pada halaman target, pengembaliannya akan benar menggunakan metode ini. Selain itu, GetResponse () akan mengeluarkan pengecualian dan karenanya Anda tidak akan mendapatkan Kode Status untuk itu. Anda perlu menjebak pengecualian dan memeriksa ProtocolError.
Kode status 400 atau 500 akan mengembalikan false. Semua yang lain membalas dengan benar. Kode ini mudah dimodifikasi agar sesuai dengan kebutuhan Anda akan kode status tertentu.
/// <summary>
/// This method will check a url to see that it does not return server or protocol errors
/// </summary>
/// <param name="url">The path to check</param>
/// <returns></returns>
public bool UrlIsValid(string url)
{
try
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Timeout = 5000; //set the timeout to 5 seconds to keep the user from waiting too long for the page to load
request.Method = "HEAD"; //Get only the header information -- no need to download any content
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
int statusCode = (int)response.StatusCode;
if (statusCode >= 100 && statusCode < 400) //Good requests
{
return true;
}
else if (statusCode >= 500 && statusCode <= 510) //Server Errors
{
//log.Warn(String.Format("The remote server has thrown an internal error. Url is not valid: {0}", url));
Debug.WriteLine(String.Format("The remote server has thrown an internal error. Url is not valid: {0}", url));
return false;
}
}
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError) //400 errors
{
return false;
}
else
{
log.Warn(String.Format("Unhandled status [{0}] returned for url: {1}", ex.Status, url), ex);
}
}
catch (Exception ex)
{
log.Error(String.Format("Could not test url {0}.", url), ex);
}
return false;
}