【问题标题】:Headers in OperationContextOperationContext 中的标头
【发布时间】:2011-02-25 22:18:04
【问题描述】:

我会做一个小项目(WCF + REST),但我有一个小问题。我想做我的授权和身份验证类。

我的授权类:

//validate api key
public class BasicAuthorization : ServiceAuthorizationManager
{
    public override bool CheckAccess(OperationContext operationContext, 
        ref Message message)
    {
        //some code
    }
}

我的身份验证类

// validation user login & password
public class BasicAuthentication : ServiceAuthenticationManager
{
    public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
        ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, 
        ref Message message)
    {
        //some code
    }
}

我有太多配置文件

<behavior>
  <serviceAuthorization 
      serviceAuthorizationManagerType="WCF.BasicAuthorization, WCF"/>
  <serviceAuthenticationManager 
      serviceAuthenticationManagerType="WCF.BasicAuthentication, WCF"/>
</behavior>

类中的代码不重要——不是问题。

我的问题是如何从 operationContext 或消息类中获取标头。我之前怎么说,我是在休息时做的,所以我想要手动设置 Authorizaion 标头/www-authenticate 标头,但应用程序看不到它。

我打开 Fiddler2,然后尝试放置任何标题,例如:

Content-Type: application/xml
Authorization: Basic bla23rwerfsd3==
User-Agent: Fiddler
Host: localhost:59305

而且message.Headers / operationContext.Headers没有任何我的头(只有另外一个),没有Authorization,没有Content-Type

【问题讨论】:

  • 我也有同样的问题。你找到解决这个问题的办法了吗?

标签: c# wcf


【解决方案1】:

您可以在 Web 操作期间使用 System.ServiceModel.Web.WebOperationContext 类访问标头,该类具有静态属性“Current”,表示当前上下文。它提供了一个“IncomingRequest”属性,其中包含“WebHeaderCollection”类型的“Header”属性。

【讨论】:

  • 它有效。我们还需要添加对 System.ServiceModel.Web 系统程序集的引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多