如何修改请求的http头; C#中的Web引用

时间:2013-06-21 15:03:52

标签: c# asp.net http

我正在创建一个使用Web服务的.NET应用程序。我需要在对该Web服务的请求中将连接http标头设置为“已关闭”。我一直在谷歌搜索这一天,但一直无法工作。

我最大的努力是下面的代码,它试图覆盖GetWebRequest方法来添加标头。这似乎失败了 - 我在其中放置了一个断点,当我运行我的应用程序时,断点永远不会被点击,连接头似乎没有设置(我正在评估这不是通过查看http标头而是通过行为处理Web请求的系统)。

一些信息:当我使用Visual Studio添加Web引用时,我右键单击解决方案资源管理器中的项目,选择“添加服务引用”,“高级”,然后选择“添加Web引用”。

namespace System.Net
{
    public class MyHttpProtocol : SoapHttpClientProtocol
    {
        protected override WebRequest GetWebRequest(Uri uri)
        {
            HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
            webRequest.Headers.Add("connection", "closed");
            return webRequest;
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

您需要使用IClientMessageInspector来更改正在构建的请求。 This question非常相似,应该给你答案。

WCF中的许多内容涉及创建行为并在Web配置中指定它们以覆盖流程的某些方面,这可能有点繁琐但非常强大。您可以在那里添加您的请求。

编辑以解决您的评论,您的代码是否如此?

public object BeforeSendRequest(
    ref System.ServiceModel.Channels.Message request,
    System.ServiceModel.IClientChannel channel)
{
    var httpRequestMessage = new HttpRequestMessageProperty();
    httpRequestMessage.Headers.Add("connection", "closed");
    request.Properties.Add(
        HttpRequestMessageProperty.Name, httpRequestMessage);
    return null;
}