我有一个接收请求消息并将其发布到另一个服务的C# WCF服务。发布到其他服务是通过HttpWebRequest完成的。我如何在我的服务中获取原始的request 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中呢?另外,原始请求可能设置了其他自定义标头,我希望将这些标头也发送到其他服务。
谢谢你,Adrya
发布于 2011-06-27 15:03:25
您可以通过以下方式获取标题
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");
但是,要知道有些headers是受限制的,不能自由修改。它们是:
我认为您应该逐个查看您可以/想要从传入调用复制到传出调用的头。
发布于 2015-03-29 01:47:30
对于ex。您希望将所有请求标头复制到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 {}
}
}
}
希望能有所帮助。
https://stackoverflow.com/questions/6489057
复制相似问题