首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将HTTP请求/响应头从调用复制到HttpWebRequest?

将HTTP请求/响应头从调用复制到HttpWebRequest?
EN

Stack Overflow用户
提问于 2011-06-27 13:50:17
回答 2查看 13K关注 0票数 5

我有一个接收请求消息并将其发布到另一个服务的C# WCF服务。发布到其他服务是通过HttpWebRequest完成的。我如何在我的服务中获取原始的request HTTP头,并在我将它们发布到其他服务时将它们放入HttpWebRequest中。

如下所示:

代码语言:javascript
运行
复制
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时,它会抛出异常,因为它需要这样设置:

代码语言:javascript
运行
复制
loHttp.ContentType = httpRequestProp.Headers[HttpRequestHeader.ContentType];

那么,有没有一种方法可以从调用中复制HTTP请求报头,并将它们作为HTTP请求报头放到另一个HttpWebRequest中呢?另外,原始请求可能设置了其他自定义标头,我希望将这些标头也发送到其他服务。

谢谢你,Adrya

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-27 15:03:25

您可以通过以下方式获取标题

代码语言:javascript
运行
复制
OperationContext.Current.RequestContext.RequestMessage.Headers

可以通过以下方式设置标头

代码语言:javascript
运行
复制
WebClient.Headers

示例:

代码语言:javascript
运行
复制
WebClient wc = new WebClient();
wc.Headers.Add("referer", "http://yourwebsite.com");
wc.Headers.Add("user-agent", "Mozilla/5.0");

但是,要知道有些headers是受限制的,不能自由修改。它们是:

  • Accept
  • Connection
  • Content-Length
  • Content-Type
  • Date
  • Expect
  • Host
  • If-Modified-Since
  • Range
  • Referer
  • Transfer-Encoding
  • User-Agent
  • Proxy-Connection

我认为您应该逐个查看您可以/想要从传入调用复制到传出调用的头。

票数 6
EN

Stack Overflow用户

发布于 2015-03-29 01:47:30

对于ex。您希望将所有请求标头复制到HttpWebRequest标头:

代码语言:javascript
运行
复制
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
CopyHeaders(httpWebRequest, httpWebRequest.Headers, this.Request.Headers);

和实现:

代码语言:javascript
运行
复制
    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 {}
            }
        }
    }

希望能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6489057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档