ये समाधान बहुत अच्छे हैं, लेकिन वे भूल रहे हैं कि 200 ओके की तुलना में अन्य स्थिति कोड हो सकते हैं। यह एक समाधान है जो मैंने स्थिति की निगरानी और इस तरह के उत्पादन वातावरण पर उपयोग किया है।
यदि लक्ष्य पृष्ठ पर एक url पुनर्निर्देशित या कोई अन्य शर्त है, तो इस पद्धति का उपयोग करके रिटर्न सही होगा। इसके अलावा, GetResponse () एक अपवाद को फेंक देगा और इसलिए आपको इसके लिए एक StatusCode नहीं मिलेगा। आपको अपवाद को फंसाने और एक प्रोटोकॉलइर्र के लिए जांच करने की आवश्यकता है।
कोई भी 400 या 500 स्टेटस कोड गलत वापस आएगा। बाकी सब सच लौटे। विशिष्ट स्थिति कोड के लिए आपकी आवश्यकताओं के अनुरूप इस कोड को आसानी से संशोधित किया जाता है।
/// <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;
}