如何发送和检索REST WCF服务的自定义标头信息

问题描述 投票:0回答:2

我正在努力在我的解决方案中设置基础架构,以发送和检索REST WCF服务的自定义标头。基本上,我们需要将UserID,密码,令牌值从客户端发送到服务,如果提供的值有效,则操作将继续执行,否则抛出异常。

我们已经有很少的类继承自IDispatchMessageInspector,IClientMessageInspector,IEndPointBehaviour,MessageHeader等接口,这对于带有soap请求的WCF来说很好。我尝试将这些类用于我的新REST WCF服务,但由于MessageHeader派生类仅支持Soap,因此无法使用。

我也尝试过使用WebOperationContext,但没有运气:(

请提供解决方案以及示例项目以解决此问题。

非常感谢!

rest wcf c#-4.0
2个回答
0
投票

在您的情况下似乎更容易询问ASP NET管道

如果您将以下内容添加到您的WCF服务,以允许它连接到ASPNET管道

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

然后你可以简单地使用HttpContext对象,就像从普通的aspnet应用程序那样获取头文件,例如

System.Web.HttpContext.Current.Request.Headers["CustomHeader"]

0
投票

如果你想在wcf rest服务中添加http头,你应该使用HttpRequestMessageProperty,它有一个Headers属性,你可以通过它的Headers属性设置http Header

 using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
            {
                HttpRequestMessageProperty property;
                     // if OutgoingMessageProperties already has HttpRequestMessageProperty, use the existing one , or  initialize a new one and 
                 set   OutgoingMessageProperties's HttpRequestMessageProperty.Name key's value to the initialized  HttpRequestMessageProperty so that the HttpRequestMessageProperty  will work 
                if (OperationContext.Current.OutgoingMessageProperties.ContainsKey(HttpRequestMessageProperty.Name)){
                    property = OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
                }
                else
                {
                    property = new HttpRequestMessageProperty();
                    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = property;
                }
          // add headers to  HttpRequestMessageProperty, it will become the http header of the reuqest
                property.Headers.Add(System.Net.HttpRequestHeader.Authorization, "myAuthorization");
                string re = client.HelloWorld();
            }

关于获取Header,只需使用WebOperationContext.Current.Headers。

WebOperationContext.Current.IncomingRequest.Headers["MyCustomHttpHeader"]

请参考http://kenneththorman.blogspot.com/2011/02/wcf-rest-client-using-custom-http.html

© www.soinside.com 2019 - 2024. All rights reserved.