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