2010-07-16 5 views
20

Je vais supposer que la réponse est non mais .... Est-il possible d'utiliser WebClient pour envoyer la méthode HEAD et renvoyer les en-têtes sous forme de chaîne ou quelque chose de similaire?HEAD avec WebClient?

Répondre

17

Vous avez raison WebClient ne supporte pas cela. Vous pouvez utiliser HttpWebRequest et définir la méthode à la tête si vous voulez que cette fonctionnalité:

System.Net.WebRequest request = System.Net.WebRequest.Create(uri); 
request.Method = "HEAD"; 
request.GetResponse(); 
3

La plupart des serveurs web que je demande accepte de cette méthode. Cependant, tous les serveurs Web ne le font pas. IIS6, par exemple, honorera la méthode de requête SOMETIMES.

Ceci est le code d'état qui est renvoyée lorsqu'une méthode n'est pas permis ...

catch (WebException webException) 
      { 
        if (webException.Response != null) 
        { 
         //some webservers don't allow the HEAD method... 
         if (((HttpWebResponse) webException.Response).StatusCode == HttpStatusCode.MethodNotAllowed) 

Merci, Mike

+0

Cela ne répond pas à la question de savoir si WebClient prend en charge l'envoi d'une requête HEAD. –

14

Une autre façon est d'hériter de WebClient et passer outre GetWebRequest(Uri address).

public class ExWebClient : WebClient 
    { 
     public string Method 
     { 
      get; 
      set; 
     } 

     protected override WebRequest GetWebRequest(Uri address) 
     { 
      WebRequest webRequest = base.GetWebRequest(address); 

      if (!string.IsNullOrEmpty(Method)) 
       webRequest.Method = Method; 

      return webRequest; 
     } 
    } 
+0

+1 en tant que client Web est beaucoup plus facile à utiliser. –

+1

Pour un novice, comment appeler cette classe surchargée? – bendecko

+0

'var wc = new ExWebClient();' au lieu de 'var wc = new WebClient();' – tomfanning