如何使用HTTPRequestMessage添加SOAP身份验证标头?

Pit*_*all 8 c# soap web-services httpclient

这是标题应该是什么样子

<soap:Header>
   <AuthenticationHeader>
     <UserName>string</UserName>
     <Password>string</Password>
   </AuthenticationHeader>
 </soap:Header>
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

string username = "TheUserName";
string password = "ThePassword";

HttpRequestMessage requestMessage = new HttpRequestMessage(method, uri);
requestMessage.Headers.Add("UserName", username);
requestMessage.Headers.Add("Password", password);
Run Code Online (Sandbox Code Playgroud)

也许我必须以某种方式设置授权标头?

requestMessage.Headers.Authorization = ??
Run Code Online (Sandbox Code Playgroud)

我觉得我不得不"构建"那个AuthenticationHeader元素,但我不知道该怎么做.有什么建议?

编辑:完整的SOAP信封

?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <AuthenticationHeader xmlns="http://www.test.com/testing/Security">
      <UserName>string</UserName>
      <Password>string</Password>
    </AuthenticationHeader>
  </soap:Header>
  <soap:Body>
    <GetMeSomething xmlns="http://www.test.com/testing/WorkFileCatalog">
      <Param1>string</Param1>
      <Param2>string</Param2>
      <XMLRetMess>string</XMLRetMess>
    </GetMeSomething>
  </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

Sub*_*bbu -1

如果您使用HttpClientPOST 请求,那么您应该构建完整的 XML 请求。

换句话说,您将构建精确的 Soap XML,包括所有元素

string requestXml = your actual full soap xml
string result = HttpClient.Post ( your actual xml )
Run Code Online (Sandbox Code Playgroud)