C# WCF设置自定义标头-读取不起作用
我需要将自定义头放入WCF。我的代码如下:C# WCF设置自定义标头-读取不起作用,c#,wcf,C#,Wcf,我需要将自定义头放入WCF。我的代码如下: ServiceReference1.Service2Client ws = new Service2Client(); using (OperationContextScope scope = new OperationContextScope((IContextChannel)ws.InnerChannel)) { MessageHeaders messageHeadersElement = Operat
ServiceReference1.Service2Client ws = new Service2Client();
using (OperationContextScope scope = new OperationContextScope((IContextChannel)ws.InnerChannel))
{
MessageHeaders messageHeadersElement = OperationContext.Current.OutgoingMessageHeaders;
messageHeadersElement.Add(MessageHeader.CreateHeader("Authorization", String.Empty, "string"));
messageHeadersElement.Add(MessageHeader.CreateHeader("username", String.Empty, "user"));
var res = ws.GetUser("123");
}
但当我试图在服务中阅读它时,以下内容中没有任何内容可用
public class OAuthAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
int index = OperationContext.Current.IncomingMessageHeaders.FindHeader("username", String.Empty);
string auth = operationContext.IncomingMessageHeaders.GetHeader<string>("username", String.Empty);
var hereIseeIt = operationContext.RequestContext.RequestMessage;
公共类OAuthAuthorizationManager:ServiceAuthorizationManager
{
受保护的覆盖布尔CheckAccessCore(OperationContext OperationContext)
{
int index=OperationContext.Current.IncomingMessageHeaders.FindHeader(“用户名”,String.Empty);
string auth=operationContext.IncomingMessageHeaders.GetHeader(“用户名”,string.Empty);
var hereiseit=operationContext.RequestContext.RequestMessage;
索引为-1:未找到
auth:也显示了一个异常,即标头不可用
HereiseIT:.ToString()显示了一个xml,我可以在其中看到用户存在,但我看不到在任何对象中访问该信息的方法
用户
123
但是我无法访问它们,因为我找不到访问s:Header的方法…请尝试使用:XPathNavigator XPN = operationContext.RequestContext.RequestMessage.CreateBufferedCopy ().CreateNavigator ();
虽然不优雅,但它通过XPathNavigator
为您提供了可访问的整个消息,这将使您能够轻松获取所需消息中的任何值
一些链接:用户名
标题的内部XML。即使您很久以前就已经解决了您的问题,我认为它可能会帮助其他面临相同问题的人
var username = String.Empty;
// using the namespace from you XML sample
var usernameHeaderPosition = OperationContext.Current
.IncomingMessageHeaders
.FindHeader("username", "http://Microsoft.WCF.Documentation");
if (usernameHeaderPosition > -1)
{
username = OperationContext.Current
.IncomingMessageHeaders
.GetReaderAtHeader(usernameHeaderPosition).ReadInnerXml();
}
尝试使用一些自定义XML命名空间,而不是
String.Empty
作为Add
和FindHeader
的第二个参数,将“String.Empty”更改为“http://Microsoft.WCF.Documentation”,但我仍然无法访问标题
var username = String.Empty;
// using the namespace from you XML sample
var usernameHeaderPosition = OperationContext.Current
.IncomingMessageHeaders
.FindHeader("username", "http://Microsoft.WCF.Documentation");
if (usernameHeaderPosition > -1)
{
username = OperationContext.Current
.IncomingMessageHeaders
.GetReaderAtHeader(usernameHeaderPosition).ReadInnerXml();
}