2009-11-20 6 views
0

Dans une application .NET que j'écris, j'ai besoin de détecter si une URL particulière est disponible. Pour l'utilisateur moyen avec un serveur DNS par défaut, une adresse invalide finirait par lancer un WebException. Cependant, à la maison, j'utilise OpenDNS. Lorsque je demande une adresse invalide à la maison, la redirection OpenDNS automatique fait croire à .NET que la requête a réussi. Comment puis-je détecter quand le serveur DNS ne me donne pas l'adresse que j'ai demandée?Détection de la redirection DNS dans .NET

est ici une partie du code:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://..."); 
request.AllowAutoRedirect = false; 

try 
{ 
    WebResponse response = request.GetResponse(); 

    using (Stream stream = response.GetResponseStream()) 
    { 
     // Do work 
     ... 
    } 
} 
catch (WebException ex) 
{ 
    // Handle normal errors 
    ... 
} 

Répondre

2

Avez-vous essayé de regarder le HTTP status code qui est retourné?

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

if (response.StatusCode == HttpStatusCode.OK) 
{ 
    using (Stream stream = response.GetResponseStream()) 
    { 
     // Do work 
     ... 
    } 
} 
else 
{ 
    // Error 
} 
+0

Cela fonctionne quand 'AllowAutoRedirect = false'. –

1

Vérifiez si la valeur correspond à l'URL WebResponse.ResponseUri originale demandée. http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.responseuri.aspx

+0

J'ai essayé, mais malheureusement, ils correspondent. –

+0

Dans quels cas ResponseUri ne correspond pas à l'URL d'origine si 'AllowAutoRedirect = false'? – dtb

+0

Comme OpenDNS simule une requête réussie, je doute que vous puissiez le dire sans le rechercher spécifiquement comme le mentionne David. –

0

Si l'ResponseUri correspond à l'URL d'origine, le mieux que vous pouvez faire est de regarder le texte de réponse et de voir si elle « regarde » comme la page OpenDNS.

Questions connexes