c# - 从对 HttpWebRequest 的调用中复制 HTTP 请求/响应 header ?

标签 c# wcf httpwebrequest http-headers

我有一个 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/

相关文章:

c# - 如何以编程方式区分不同的 IOException?

同一WCF服务应用程序中的WCF wsHttpBinding和BasicHttpBinding

c# - 将 MySQL 代理连接到 C# 应用程序

wcf - 无法在 Web 服务器上开始调试。底层连接已关闭 : An unexpected error occurred on a send

c# - http 'POST' 请求出现问题

c# - 1 级 C#/SQL Server 开发人员测试

c# - 延迟 wpf 动画旋转

c# - 从文本框中选择单词

.net - 是否有正确的方法来处理 httpwebrequest?

c# - 如何使用 WebRequest 访问使用 HTTPS 的 SSL 加密站点?