繁体   English   中英

C# 服务参考和 SOAP header

[英]C# service reference and SOAP header

在我的程序中,我引用了一个网络服务。 但是,此 Web 服务需要身份验证:

        <headers>
          <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
            <UsernameToken>
              <Username>{username}</Username>
              <Password>{password}</Password>
            </UsernameToken>
          </Security>
        </headers>

如何在我的程序中添加这种身份验证,请求网络服务?

像下面这样的东西似乎不起作用:

      client.ClientCredentials.UserName.UserName = "username";
      client.ClientCredentials.UserName.Password = "password";

我想避免在我的 app.config 中放一些东西:

<headers>
                  <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                      <UsernameToken>
                          <Username>{username}</Username>
                          <Password>{password}</Password>
                      </UsernameToken>
                  </Security>
              </headers>

这是有效的,但不是我想要的方式。

试试看

 public async Task<string> HttpClientAsync(string url , string json, string token)
            {
                try
                {
                    var JsonData = new StringContent(json, Encoding.UTF8, "text/xml");
                    var handler = new HttpClientHandler();
                    handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                    handler.ServerCertificateCustomValidationCallback =
                        (httpRequestMessage, cert, cetChain, policyErrors) =>
                        {
                            return true;
                        };
                    using (var client = new HttpClient(handler))
                    {
                        //  System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token);
                        client.DefaultRequestHeaders.Add("SOAPAction", "");
                        var result = await client.PostAsync(url, JsonData);
                        string resultContent = await result.Content.ReadAsStringAsync();
                        return resultContent;
                    }
                }
                catch (Exception e)
                {
                    return e.Message;
                }
    
            }

暂无
暂无

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

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