【问题标题】:Sending custom header with ksoap2 to asp.net将带有 ksoap2 的自定义标头发送到 asp.net
【发布时间】:2020-09-30 15:06:27
【问题描述】:

所以我正在尝试将一些身份验证变量添加到我的soap 请求的标头中。对发件人进行身份验证。客户端是一个安卓应用,而服务器使用的是 asp.net 网络表单。

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

唯一存在的键是 “联系” “内容长度” “内容类型” “接受编码” “主持人” “用户代理” “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";
}

谁能告诉我我做错了什么?

【问题讨论】:

    标签: java asp.net soap ksoap2


    【解决方案1】:

    解决了。 问题是asp.net的webmethod中的响应头不是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:,不知道

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多