使用c#中需要操作级授权的WSDL
本文关键字:授权 WSDL 操作 使用 | 更新日期: 2023-09-27 18:01:24
我正在尝试使用第三方WSDL。我添加了它作为服务参考。我像这样初始化客户机和查询参数:
var ltRequest = new SearchEmailAddressStatus
{
EmailAddress = emailAddressList.ToArray()
};
var ltClient = new CommunicationPreferenceServiceClient
{
ClientCredentials =
{
UserName =
{
UserName = ltProperties.CompanyCredential.UserName,
Password = ltProperties.CompanyCredential.Password
}
}
};
var ltResponse = ltClient.searchEmailAddressStatusWS(ltRequest);
在观看Fiddler中的数据包后,我注意到Auth头从未发送到服务器。是否有任何方法可以在我的请求中手动插入授权头?
好了,经过一番挖掘,我找到了答案。在声明客户端之后,我使用了以下代码:
using (var scope = new OperationContextScope(ltClient.InnerChannel))
{
var reqProperty = new HttpRequestMessageProperty();
reqProperty.Headers[HttpRequestHeader.Authorization] = "Basic "
+ Convert.ToBase64String(Encoding.ASCII.GetBytes(
ltClient.ClientCredentials.UserName.UserName + ":" +
ltClient.ClientCredentials.UserName.Password));
OperationContext.Current
.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = reqProperty;
var ltResponse = ltClient.searchEmailAddressStatusWS(ltRequest);
}
我相信这是在wsdl请求中获得自定义报头的最简单的方法。如果有人有更好的方法,我很乐意听听。