WCF客户端调用api,带有承载令牌(.net core 3.1)-未经授权的调用

WCF客户端调用api,带有承载令牌(.net core 3.1)-未经授权的调用,wcf,.net-core,Wcf,.net Core,我试图调用一个soap api,它需要一个承载授权令牌和一个来自.net core的订阅密钥,但是我得到了一个我不理解的异常 MessageSecurityException:HTTP请求未经客户端授权 身份验证方案“匿名”。接收到的身份验证标头 来自服务器的数据为“” 我已经验证了订阅密钥和令牌是否与SoapUI一起工作。这是SoapUI调用: POST {{URL}} HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;

我试图调用一个soap api,它需要一个承载授权令牌和一个来自.net core的订阅密钥,但是我得到了一个我不理解的异常

MessageSecurityException:HTTP请求未经客户端授权 身份验证方案“匿名”。接收到的身份验证标头 来自服务器的数据为“”

我已经验证了订阅密钥和令牌是否与SoapUI一起工作。这是SoapUI调用:

POST {{URL}} HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "{{ACTION}}"
Authorization: Bearer Tplen
Subscription-Key: {{KEY}}
Content-Length: 343
Host: {{HOST}}
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.5 (Java/12.0.1)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="{{REPLACED}}">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:REPLACED>
         <!--Optional:-->
         <ser:REPLACED>VALUE</ser:REPLACED>
      </ser:REPLACED>
   </soapenv:Body>
</soapenv:Envelope>
和下面的代码来添加标题

public class TestHeaderInspector : IClientMessageInspector
{
    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
    }

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        var httpRequestMessage = new HttpRequestMessageProperty();
        httpRequestMessage.Headers.Add("Subscription-Key", key);
        httpRequestMessage.Headers.Add("Authorization", "Bearer "+ token);
        request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
        return null;
    }
} 

根据您提供的错误消息,我认为这可能是因为您的自定义标题未成功添加到消息中。我认为您可以尝试使用OperationContextScope添加自定义标题。在这个链接中有一个例子。你可以参考它:


我认为这可能是因为您的自定义标题未成功添加到邮件中。我认为您可以尝试使用OperationContextScope添加自定义标题。在这个链接中有一个例子。你可以参考它:
public class Test : IEndpointBehavior
{
    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.ClientMessageInspectors.Add(new TestHeaderInspector());
    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
    }

    public void Validate(ServiceEndpoint endpoint)
    {
    }
}
public class TestHeaderInspector : IClientMessageInspector
{
    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
    }

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        var httpRequestMessage = new HttpRequestMessageProperty();
        httpRequestMessage.Headers.Add("Subscription-Key", key);
        httpRequestMessage.Headers.Add("Authorization", "Bearer "+ token);
        request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
        return null;
    }
}