繁体   English   中英

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

[英]Sending custom header with ksoap2 to asp.net

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

我在客户端使用的库是 ksoap2。 我遇到的问题是,当我在服务器端恢复我的肥皂信封并检查请求的标头时,我的自定义标头元素不存在。

唯一的键是“Connection”“Content-Length”“Content-Type”“Accept-Encoding”“Host”“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 的webmethod 中响应的标头不是soap 信封的标头。

要访问soap信封的标题,您需要做什么才能将其添加到webmethod类

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 标头添加到标头数组“unknownHeaders”中。 然后可以在您的代码中引用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM