Пользовательский заголовок HTTP с вызовом веб-сервиса - PullRequest
0 голосов
/ 09 сентября 2009

Мне нужно сделать вызов веб-службы в C #, и при каждом запросе мне нужно отправлять собственный HTTP-заголовок. Как мне это сделать.

спасибо

1 Ответ

2 голосов
/ 10 сентября 2009

Создайте класс, который реализует 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;
}

Затем создайте поведение конечной точки, которое применяет инспектор сообщений к клиентской среде выполнения. Вы можете применить поведение в качестве атрибутов или использовать элемент расширения поведения.

Вот отличный пример того, как добавить HTTP-заголовок user-agent ко всем сообщениям запроса. Я использую это в некоторых из моих клиентов. Вы можете, несомненно, сделать что-то подобное для любого заголовка Вы также можете сделать то же самое на стороне службы, реализовав IDispatchMessageInspector .

Это то, что вы имели в виду?

...