2015-01-06 8 views
8

Ich habe ein WebApi entwickelt, das OAuth2.0 und OData implementiert.Wie integriert man OAuth2.0 mit OData Client Code Generator?

Jetzt mache ich einen Client, um zu testen, was ich bisher implementiert habe. Ich habe die Vorlagen für OData mit dem OData Client Code Generator erstellt, aber wie kann ich ein De-Access-Token in die OData-Anfrage einführen?

Haben Sie eine Idee, wie Sie die OData-Vorlagen erweitern, um das OAuth2.0-Schema einzuführen? Oder einfacher gesagt, wie führe ich OAuth-Zugriffstoken in jede OData-Anfrage ein?

UPDATE

static void Main(string[] args) 
    { 
    var container = new Default.Container(new Uri(baseurl)); 

    TokenResponse accessToken = null; 
    try 
    { 
     accessToken = GetToken(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Can't do nothing without an access token..."); 
     return; 
    } 


    //I want to introduce in every request the following information: 
    //Basic autentication header with cliendId + clientSecret 
    //Access token 

    //How do I introduce them before making the call on the OData service? 
    foreach (var s in container.ServiceSessions) 
    { 
     string format = "; 
     Console.WriteLine("PKID:{0}", s.PKID); 
    } 
} 
+0

Bitte einen Code hinzufügen und spezifisch sein über das Ende Sie wollen Ergebnisse. Ich möchte einen Benutzer auf abc.com anmelden. Oder möchten öffentlich geteilte Informationen des Benutzers haben. – Ammar

+0

Ich habe einen einfachen Beispielcode und weitere Informationen über das, was ich erreichen möchte, eingeführt. Ist es jetzt klarer? –

+0

Versuchen Sie, clientId und Secret von Facebook zu haben? – Ammar

Antwort

14

Nach einem wenig Forschung ich die Lösung gefunden habe:

var container = new Default.Container(new Uri(http://localhost:9000/)); 

//Registering the handle to the BuildingRequest event. 
container.BuildingRequest += (sender, e) => OnBuildingRequest(sender, e, accessToken); 


//Every time a OData request is build it adds an Authorization Header with the acesstoken 
private static void OnBuildingRequest(object sender, BuildingRequestEventArgs e, TokenResponse token) 
    { 
    e.Headers.Add("Authorization", "Bearer " + token.AccessToken); 
    } 
3

Wenn Sie den Zugriffstoken als HTTP-Request-Header hinzufügen möchten, sollte die folgende Beispiel helfen:

var context = new DefaultContainer(new Uri("http://host/service/")); 
context.SendingRequest2 += (s, e) => e.RequestMessage.SetHeader("headerName", "headerValue"); 

jeder Anfrage gesendet, nachdem Sie diese angegeben haben Code wird diesen Header enthalten.

+0

Ich danke Ihnen für die Hilfe Yi Ding, ich habe eine ähnliche Lösung gefunden. Anstatt den Header vor dem Senden der Anfrage hinzuzufügen, habe ich den Authentifizierungsheader hinzugefügt, wenn die Anfrage erstellt wird. –

+0

@ JoãoAntunes Sie haben Recht. Die Event-Handler 'BuildingRequest' funktionieren ebenfalls. –