【问题标题】:C# get rid of Connection header in WebClientC# 去掉 WebClient 中的 Connection 标头
【发布时间】:2010-10-28 03:04:24
【问题描述】:

我正在通过 WebClient() 使用 C#。

我正在测试发送了哪些标头,我注意到自动添加了以下标头。

Connection : Keep-Alive

有什么办法可以去掉吗?

【问题讨论】:

    标签: c# webclient


    【解决方案1】:

    今天早上我遇到了同样的问题。按照 Jon Skeet 的提示,可以通过继承 HttpWebRequestWebClient 来实现:

    class MyWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).KeepAlive = false;
            }
            return request;
        }
    }
    

    现在发送的标头将包括Connection : close

    【讨论】:

    • 让我建议一个更新版本,因为 C# 已经移动了一点 ;-) class MyWebClient : WebClient { protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); if (request is HttpWebRequest wr) { wr.KeepAlive = false; } return request; } }
    【解决方案2】:

    使用HttpWebRequest 而不是WebClient(它稍微不太方便,但不是很方便)并将KeepAlive 属性设置为false

    我尚未对此进行测试 - 可能它只会更改 Connection 标头的值而不是删除它 - 但值得一试。 Connection 属性的文档至少建议它只添加 Keep-Alive。

    【讨论】:

    • 需要注意的一点是,这样做不会删除 Connection 标头,尽管它确实将其从“Connection: Keep-Alive”更改为“Connection: Close” .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2011-11-27
    • 2013-03-05
    • 2012-06-11
    相关资源
    最近更新 更多