带有 WebClient 的 HEAD?

HEAD with WebClient?

提问人: 提问时间:7/17/2010 更新时间:10/12/2012 访问量:11163

问:

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

.NET HTTP WebClient

评论


答:

30赞 btlog 7/17/2010 #1

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

System.Net.WebRequest request = System.Net.WebRequest.Create(uri);
request.Method = "HEAD";
request.GetResponse();
4赞 arachnode.net 9/19/2012 #2

我请求的大多数 Web 服务器都将接受此方法。但是,并非每个 Web 服务器都这样做。例如,IIS6 将遵循请求方法 SOMETIMES。

这是不允许使用方法时返回的状态代码...

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

谢谢 话筒

评论

0赞 Lynn Crumbling 5/16/2017
这并不能回答 WebClient 是否支持发送 HEAD 请求的问题。
18赞 xrustal 10/12/2012 #3

另一种方法是从 WebClient 继承并重写 GetWebRequest(Uri 地址)。

    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;
        }
    }

评论

1赞 bendecko 4/8/2014
对于新手,我如何称呼这个被覆盖的类?
0赞 tomfanning 9/5/2016
var wc = new ExWebClient();而不是var wc = new WebClient();
0赞 dyslexicanaboko 7/9/2018
@bendecko,由于访问修饰符是受保护的,因此无法从类外部调用它。但是,您可以只创建一个 Facade 方法来调用受保护的方法,最坏的情况。Ex: public WebRequest GetWebRequest2(Uri address) { return GetWebRequest(uri); } //请使用比 GetWebRequest2 更好的名称