【问题标题】:HEAD with WebClient?使用 WebClient 进行 HEAD?
【发布时间】:2011-03-17 04:25:30
【问题描述】:

我会假设答案是否定的,但是...... 有没有办法使用 WebClient 发送 HEAD 方法并将标头作为字符串或类似的东西返回?

【问题讨论】:

    标签: .net http webclient head


    【解决方案1】:

    你是对的 WebClient 不支持这个。如果你想要这个功能,你可以使用 HttpWebRequest 并将方法设置为 HEAD:

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

    【讨论】:

      【解决方案2】:

      另一种方法是从 WebClient 继承并覆盖 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;
              }
          }
      

      【讨论】:

      • 对于一个新手,我该如何称呼这个被覆盖的类?
      • var wc = new ExWebClient(); 而不是 var wc = new WebClient();
      • @bendecko 因为访问修饰符是受保护的,你不能从类外调用它。但是,您可以只创建一个外观方法来调用受保护的方法最坏的情况。例如:public WebRequest GetWebRequest2(Uri address) { return GetWebRequest(uri); } //请使用比 GetWebRequest2 更好的名称
      【解决方案3】:

      我请求的大多数网络服务器都会接受这种方法。但是,并非每个 Web 服务器都这样做。例如,IIS6 有时会接受请求方法。

      这是当方法不被允许时返回的状态码...

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

      谢谢, 迈克

      【讨论】:

      • 这并没有回答 WebClient 是否支持发送 HEAD 请求的问题。
      猜你喜欢
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2021-08-14
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多