Bu çözümler oldukça iyi, ancak 200 OK dışında başka durum kodları olabileceğini unutuyorlar. Bu, durum izleme vb. İçin üretim ortamlarında kullandığım bir çözüm.
Hedef sayfada bir url yönlendirmesi veya başka bir koşul varsa, bu yöntem kullanılarak dönüş doğru olacaktır. Ayrıca GetResponse () bir istisna atar ve bu nedenle bunun için bir Durum Kodu alamazsınız. İstisnayı yakalamanız ve bir Protokol Hatası olup olmadığını kontrol etmeniz gerekir.
Herhangi bir 400 veya 500 durum kodu yanlış döndürür. Diğerlerinin tümü gerçek olur. Bu kod, belirli durum kodlarına yönelik ihtiyaçlarınıza uyacak şekilde kolayca değiştirilebilir.
/// <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;
}