通过身份验证标头 API WCF Soap C# .Net
Posted
技术标签:
【中文标题】通过身份验证标头 API WCF Soap C# .Net【英文标题】:Pass Authentication Header API WCF Soap C# .Net 【发布时间】:2021-10-11 08:39:07 【问题描述】:我正在尝试使用 WCF 向 soap 中的 API 发送请求,在 API 文档中我被告知首先我需要传递以下包含固定令牌的身份验证标头: p>
<soapenv:Header>
<Token xmlns="Token">12345as566788ds900987654</Token>
</soapenv:Header>
传递并验证此令牌后,我访问了发送文件所需的类,我尝试使用下面的代码来组装搜索,但出现错误:System.ServiceModel.FaultException:通知我需要在标头中传递令牌标记。 下面是我的尝试:
using (new OperationContextScope(client.InnerChannel))
HttpRequestMessageProperty requestMessage = new();
requestMessage.Headers["Token"] = "12345as566788ds900987654";
var result= client.uploadFile(file);
【问题讨论】:
【参考方案1】:你可以在客户端试试这个:
IContextChannel contextChannel = (IContextChannel)myServiceProxy;
using (OperationContextScope scope = new OperationContextScope(contextChannel))
MessageHeader header = MessageHeader.CreateHeader("PlayerId", "", _playerId);
OperationContext.Current.OutgoingMessageHeaders.Add(header);
act(service);
你可以在服务器端试试这个:
private long ExtractPlayerIdFromHeader()
try
var opContext = OperationContext.Current;
var requestContext = opContext.RequestContext;
var headers = requestContext.RequestMessage.Headers;
int headerIndex = headers.FindHeader("PlayerId", "");
long playerId = headers.GetHeader<long>(headerIndex);
return playerId;
catch (Exception ex)
this.Log.Error("Exception thrown when extracting the player id from the header", ex);
throw;
【讨论】:
感谢@佳瑶的帮助以上是关于通过身份验证标头 API WCF Soap C# .Net的主要内容,如果未能解决你的问题,请参考以下文章
在现有 WCF SOAP 服务中添加 Http 标头不起作用