3

J'ai une application qui doit parfois faire quelques requêtes au serveur pour voir que ces requêtes sont correctement bloquées. En d'autres termes, la réponse du serveur attendue est 403 Interdit.Comment éviter WebException for 403 Réponse interdite?

Avec un morceau de code comme ceci:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(protectedPage); 
httpRequest.Method = WebRequestMethods.Http.Head; 
WebResponse response = HttpRequest.GetResponse(); 

un WebException est lancé sur la dernière ligne.

Lors du profilage du code, cette exception dans un bloc try/catch a un impact sur les performances que je souhaite éviter.

Existe-t-il un moyen de vérifier la réponse du serveur, en attendant un 403, sans avoir à attraper une exception (mais en évitant d'utiliser directement les sockets)?

+0

Je ne vois pas comment attraper cette exception affecterait les performances du tout. Je veux dire que cela ne prend rien par rapport au temps qu'il faut pour recevoir une page Web. – Will

Répondre

3

Malheureusement, il s'agit d'un vexing exception dans le cadre, et il n'y a aucun moyen de l'éviter (tout en utilisant la classe HttpWebRequest). Mais, comme High l'a souligné, cette gestion des exceptions prendra des nanosecondes, alors que la requête web elle-même prendra au mieux des millisecondes, donc ne vous inquiétez pas. L'objet WebException a une propriété Response qui contient la réponse; Lorsque vous gérez l'exception, il est important de disposer de cet objet WebResponse (pour éviter les connexions qui fuient).

+0

+1 pour la promotion de la catégorisation des exceptions d'Eric Lippert – Tergiver

+0

@Tergiver, je pense qu'il s'agit d'une situation où l'exception vexante d'un cas d'utilisation est l'exception exogène d'un autre cas d'utilisation. 'File.Open' lance si vous n'avez pas la permission de lire le fichier,' HttpWebRequest' fait la chose analogue ici. –

2

Ce qui prend du temps dans le profilage n'est probablement pas l'exception, mais la réponse réelle du site Web.

La propriété WebException.Status vous donne le code d'état de la réponse HTTP et vous pouvez effectuer un traitement supplémentaire en fonction de cela.

+1

WebException.Status indique simplement une erreur de protocole. Il ne donne pas le code d'état. –

+1

Vous devez émettre l'exception. Réponse à 'HttpWebResponse' et vérifiez la propriété' response.StatusCode'. –

+1

Merci, ((HttpWebResponse) (we.Response)). StatusCode donne la valeur comme vous l'avez dit. –

Questions connexes