2011-02-25 9 views
5

Haría un pequeño proyecto (WCF + REST) ​​y tendré un pequeño problema. Quiero hacer mi clase de Autorización y Autenticación.Encabezados en OperationContext

Mi clase de autorización:

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

clase Mi Autenticación

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

tengo demasiado algún archivo de configuración

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

El código en la clase no es importante - no es un problema.

Mi problema es cómo obtener Encabezados de operaciónContext o clase de mensaje. Como digo antes, hago esto en reposo, así que quiero el conjunto de autorizaciones de encabezado manual/encabezado www-authenticate, pero la aplicación no lo ve.

enciendo la Fiddler2, y tratar de poner cualquier encabezado por ejemplo:

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

Y los message.Headers/operationContext.Headers no tiene ningún mi cabecera (sólo tiene otro), sin autorización , no Content-Type

+0

Estoy teniendo el mismo problema. ¿Has encontrado alguna solución a este problema? –

Respuesta

14

Puede acceder a los encabezados durante su operación web utilizando la clase System.ServiceModel.Web.WebOperationContext, que tiene una propiedad estática "Current", que representa el contexto actual. Proporciona una propiedad "IncomingRequest" que contiene una propiedad "Encabezado" de tipo "WebHeaderCollection".

+0

Sí, gracias, está funcionando genial :) – user634199

+0

Funciona. También debemos agregar una referencia al ensamblado del sistema System.ServiceModel.Web. –