[英]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.