我有一个 C# WCF 服务,它接收请求消息并将其发布到另一个服务。 发布到其他服务是通过 HttpWebRequest 完成的。 当我将它们发布到其他服务时,如何在我的服务中获取原始请求 HTTP header 并将它们放入 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 请求 header 并将它们作为 HTTP 请求 header 放入另一个 HttpWebRequest ?此外,原始请求可能设置了其他自定义 header ,我想将它们也发送到其他服务。
谢谢, 阿德里亚
最佳答案
你可以通过
获取标题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");
但是请注意,有些 header 是有限制的,不能随意修改。它们是:
- 接受
- 连接
- 内容长度
- 内容类型
- 日期
- 期待
- 主持人
- If-Modified-Since
- 范围
- 推荐人
- 传输编码
- 用户代理
- 代理连接
我想您应该逐一查看可以/想要从传入调用复制哪些 header 到传出调用。
关于c# - 从对 HttpWebRequest 的调用中复制 HTTP 请求/响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6489057/