Скопировать заголовки HTTP-запроса / ответа из вызова в HttpWebRequest? - PullRequest
3 голосов
/ 27 июня 2011

У меня есть служба CF WCF, которая получает сообщение с запросом и отправляет его в другую службу.Отправка в другой сервис осуществляется через HttpWebRequest.Как я могу получить в своем сервисе исходные HTTP-заголовки запроса и поместить их в запрос HttpWebRequest, когда я отправляю их в другой сервис.

Примерно так:

HttpRequestMessageProperty httpRequestProp = GetHttpRequestProp(requestMessage);
 HttpWebRequest loHttp = (HttpWebRequest)WebRequest.Create(uri);
  foreach (var item in httpRequestProp.Headers.AllKeys)
            {

                 loHttp.Headers.Add(item, httpRequestProp.Headers[item]);
            }

Я знаю, что это не такне работает, потому что HttpWebRequest loHttp имеет свои собственные свойства, и когда я пытаюсь установить ContentType, например, описанным выше способом, он выдает исключение, потому что его нужно установить так:

loHttp.ContentType = httpRequestProp.Headers[HttpRequestHeader.ContentType];

Так есть ли способскопировать заголовки HTTP-запроса из вызова и поместить их в качестве заголовков HTTP-запроса в другой запрос HttpWebRequest?Также в исходном запросе могут быть установлены другие пользовательские заголовки, и я хочу отправить их также в другой сервис.

Спасибо, Адриа

Ответы [ 2 ]

5 голосов
/ 27 июня 2011

Вы можете получить заголовки через

OperationContext.Current.RequestContext.RequestMessage.Headers

Вы можете установить заголовки через

WebClient.Headers

Пример:

WebClient wc = new WebClient();
wc.Headers.Add("referer", "http://yourwebsite.com");
wc.Headers.Add("user-agent", "Mozilla/5.0");

Тем не менее, следует понимать, что некоторые заголовкиограничены и не могут быть изменены свободно.Это:

  • Принять
  • Соединение
  • Длина содержимого
  • Тип содержимого
  • Дата
  • Expect
  • Host
  • If-Modified-Since
  • Range
  • Referer
  • Transfer-Encoding
  • User-Agent
  • Proxy-Connection

Полагаю, вы должны посмотреть, в каждом конкретном случае, какие заголовки вы можете / хотите реплицировать из входящего вызова в исходящий.

0 голосов
/ 28 марта 2015

Например Вы хотите скопировать все заголовки Request в заголовки HttpWebRequest:

HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
CopyHeaders(httpWebRequest, httpWebRequest.Headers, this.Request.Headers);

и реализация:

    void CopyHeaders(object rootTo, NameValueCollection to, NameValueCollection from)
    {
        foreach (string header in from.AllKeys)
        {
            try
            {
                to.Add(header, from[header]);
            }
            catch
            {
                try
                {
                    rootTo.GetType().GetProperty(header.Replace("-", "")).SetValue(rootTo, from[header]);
                }
                catch {}
            }
        }
    }

Надеюсь, это поможет.

...