通过身份验证标头 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 标头不起作用

如何在WPF应用程序中的SOAP客户端的“Set-Cookie”标头响应的新请求中设置“Cookie”标头

在 Wcf 自定义发送端口上生成 SOAP 操作标头

通过 HTTP 标头验证 SOAP 调用

如何在 wcf 中添加自定义肥皂标题?

对 Web 服务进行身份验证的最佳方式是啥