具有Web服务调用的自定义HTTP标头

时间:2009-09-09 18:44:19

标签: c# wcf web-services

我需要在C#中进行Web服务调用,并且需要发送自定义HTTP标头的每个请求。我该怎么做。谢谢

1 个答案:

答案 0 :(得分:2)

创建一个实现IClientMessageInspector的类。在BeforeSendRequest方法中,将自定义标头添加到外发邮件中。它可能看起来像这样:

public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request,  System.ServiceModel.IClientChannel channel)
{
    HttpRequestMessageProperty httpRequestMessage;
    object httpRequestMessageObject;

    if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
    {
        httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;

        if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER]))
        {
            httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent;
        }
    }
    else
    {
        httpRequestMessage = new HttpRequestMessageProperty();
        httpRequestMessage.Headers.Add(USER_AGENT_HTTP_HEADER, this.m_userAgent);
        request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
    }

    return null;
}

然后创建将消息检查器应用于客户端运行时的端点行为。您可以将该行为应用为属性,或使用行为扩展元素。

这是一个很好的example如何向所有请求消息添加HTTP用户代理标头。我在一些客户中使用它。毫无疑问,您可以为任何标题执行类似的操作。您也可以通过实施IDispatchMessageInspector

在服务端执行相同操作

这是你的想法吗?