如何在WCF中向请求添加授权标头?

uma*_*ais 6 c# wcf header winforms

我正在使用Windows窗体应用程序,并且需要调用WCF服务.我需要在请求发送到服务之前为请求添加标头(授权 - 自定义).我也有一个自定义检查器类.我尝试了以下但不以某种方式调用服务,它返回一个异常.

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    MessageHeader header = MessageHeader.CreateHeader("Authorization", "", "Basic Y19udGk6Q29udGlfQjNTVA==");
    OperationContext.Current.OutgoingMessageHeaders.Add(header);
    HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
    httpRequestProperty.Headers.Add("Authorization", "Basic Y19udGk6Q29udGlfQjNTVA==");
    httpRequestProperty.Headers.Add(HttpRequestHeader.UserAgent, "Continental");
            OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
    sentMessages.Add(request.ToString());
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样一个最简单的方法:

MessageHeader header = MessageHeader.CreateHeader("Authorization", "", "Basic Y19udGk6Q29udGlfQjNTVA==");
request.Headers.Add(header);
Run Code Online (Sandbox Code Playgroud)

但它是相同的,添加了授权标题但它没有到达服务,我怎么知道服务接收到什么标题?当我在请求中手动添加这样的头文件(运行之前)时,我使用SOAP UI和服务响应很好.

Sri*_*vas 8

最简单的方法是在客户端添加它:

using (MyServ.ServiceClient proxy = new MyServ.ServiceClient())
{
     using (new System.ServiceModel.OperationContextScope(proxy.InnerChannel))
     {
         MessageHeader head = MessageHeader.CreateHeader("Authorization", "http://yournamespace.com/v1", data);
         OperationContext.Current.OutgoingMessageHeaders.Add(head);
     }
}
Run Code Online (Sandbox Code Playgroud)

在服务器端检索它:

string  auth = OperationContext.Current.IncomingMessageHeaders.
GetHeader<string>("Authorization", "http://mynamespace.com/v1");
Run Code Online (Sandbox Code Playgroud)

我还建议你查看这些文章:

使用WCF的Http请求中缺少授权标头

使用wsHttpBinding的WCF服务 - 操作HTTP请求标头