使用 ksoap2 将自定义 header 发送到 asp.net

Sending custom header with ksoap2 to asp.net

所以我正在尝试向我的 soap 请求的 header 添加一些身份验证变量。对发件人进行身份验证。客户端是一个 android 应用程序,服务器正在使用 asp.net 网络表单。

我在客户端使用的库是 ksoap2。我遇到的问题是,当我在服务器端重新启动 soap envelop 并检查请求的 header 时,我的自定义 header 元素不存在。

唯一的键是 “联系” “Content-Length” “Content-Type” “Accept-Encoding” “主持人” “User-Agent” “SOAPAction” 其中自定义名称为“AuthHeader”(当前代码来自一个答案,我从另一个线程的答案中获取)

Java代码是这样写的

Element h = new Element().createElement(NAMESPACE, "AuthHeader");
Element username = new Element().createElement(NAMESPACE, "user");
username.addChild(Node.TEXT, "USERNAME");
h.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(NAMESPACE, "pass");
pass.addChild(Node.TEXT, "PASSWORD");
h.addChild(Node.ELEMENT, pass);

envelope.headerOut = new Element[1];
envelope.headerOut[0] = h;

webmethed就是这样

[WebMethod]
public string ValidateRequest()
{
  Console.WriteLine(HttpContext.Current.Request.Headers.AllKeys);
  return "1.0";
}

任何人都可以告诉我我做错了什么吗?

解决了。 问题是 asp.net 的网络方法中的响应 header 不是 soap 信封的 header。

要访问 soap envelop 的 header,您需要将其添加到网络方法 class

public SoapUnknownHeader[] unknownHeaders;
[WebMethod]
[SoapHeader("unknownHeaders", Required = false)]
public string ValidateRequest()
{
  string value = unknownHeaders[0].Element["n0:user"].InnerText;
  Console.WriteLine(value);
  
  return "1.0";
}
/* Output: "USERNAME" */

WebMethod 标签下的 SoeapHeader 标签会自动将 soap header 添加到 header 的“unknownHeaders”数组中。然后可以在您的代码中引用它。

还有为什么要在名字前面加上n0: 不知道