You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除MessageHeader生成的外层Security根元素

解决MessageHeader自动生成重复外层Security节点的问题

问题原因

你当前的代码会生成嵌套的Security节点,根源在于:

  • 你构造的el本身就是完整的<wsse:Security>节点
  • 调用MessageHeader.CreateHeader("Security", "wsse", el)时,方法会额外生成一个外层<Security xmlns="wsse">节点,将你的el作为子元素嵌入,导致重复嵌套

解决方案

核心做两个调整:

  1. 不要传递完整的Security节点作为Header内容,而是传递它的子节点(即UsernameToken)
  2. CreateHeader的命名空间参数要传完整URI,不是前缀"wsse"

方法一:从现有Security节点提取子元素

var el = XElement.Parse("<wsse:Security xmlns:wsse='http://schemas.xmlsoap.org/ws/2002/07/secext'>" +
        "<wsse:UsernameToken xmlns:wsu='http://schemas.xmlsoap.org/ws/2002/07/utility'>" +
        "<wsse:Username>TEST</wsse:Username>" +
        "<wsse:Password Type='wsse:PasswordText'>TEST1</wsse:Password>" +
        "</wsse:UsernameToken>" +
        "</wsse:Security>");

// 提取Security节点的所有子节点作为Header内容
var headerContent = el.Nodes();

// 传入完整的命名空间URI,而非前缀
request.Headers.Add(MessageHeader.CreateHeader(
    "Security", 
    "http://schemas.xmlsoap.org/ws/2002/07/secext", 
    headerContent));

方法二:直接构造UsernameToken节点(更简洁)

跳过外层Security节点的构造,直接传入UsernameToken:

var usernameTokenEl = XElement.Parse("<wsse:UsernameToken xmlns:wsse='http://schemas.xmlsoap.org/ws/2002/07/secext' xmlns:wsu='http://schemas.xmlsoap.org/ws/2002/07/utility'>" +
        "<wsse:Username>TEST</wsse:Username>" +
        "<wsse:Password Type='wsse:PasswordText'>TEST1</wsse:Password>" +
        "</wsse:UsernameToken>");

request.Headers.Add(MessageHeader.CreateHeader(
    "Security", 
    "http://schemas.xmlsoap.org/ws/2002/07/secext", 
    usernameTokenEl));

最终生成的正确结构

调整后,请求头会生成单个Security节点,不再嵌套:

<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
  <wsse:UsernameToken xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
    <wsse:Username>TEST</wsse:Username>
    <wsse:Password Type="wsse:PasswordText">TEST1</wsse:Password>
  </wsse:UsernameToken>
</wsse:Security>

内容的提问来源于stack exchange,提问作者FrenkyB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:35:01