2013-09-26 4 views
18

Ich habe den folgenden Code:Hinzufügen Zulassung zu den Headern

... 
AuthenticationHeaderValue authHeaders = new AuthenticationHeaderValue("OAuth2", Contract.AccessToken); 
string result = await PostRequest.AuthenticatedGetData(fullUrl, null, authHeaders); 
return result; 
... 

public static async Task<string> AuthenticatedGetData(string url, FormUrlEncodedContent data, AuthenticationHeaderValue authValue) 
{ 

    HttpClient client = new HttpClient(); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(authValue.Parameter); 

    HttpResponseMessage response = await client.PostAsync(new Uri(url), data); 

    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
    response.EnsureSuccessStatusCode(); 
    string responseBody = await response.Content.ReadAsStringAsync(); 
    return responseBody; 
} 

Die Antwort = erwarten Teil weiterhin nur eine laufende Schleife und nichts passiert. Irgendwelche Ideen, was ich falsch mache?

Die Frage ist wirklich, wie kann ich die folgenden Header senden:

Authorization: OAuth2 ACCESS_TOKEN 

zu einer externen Webseite api

Antwort

16

Diese Linie

client.DefaultRequestHeaders.Authorization = 
      new AuthenticationHeaderValue(authValue.Parameter); 

Wird dieser Header-Wert

produzieren
Authorization: ACCESS_TOKEN 

Dabei ist ACCESS_TOKEN der Wert authValue.Parameter. Sie wollen den Wert, den Sie stattdessen die erforderlichen Kopf

client.DefaultRequestHeaders.Authorization = authValue; 

Wird

produzieren
Authorization: OAuth2 ACCESS_TOKEN 
+0

Ich kann jetzt sehen, funktioniert. DefaultRequestHeaders werden wie angegeben festgelegt. Sollte ich annehmen, dass, weil es nicht funktioniert, ich die richtigen Header-Sachen nicht durchgeschickt habe, hatte ich einen Höhepunkt in der OAUTH-Dokumentation und sah, dass es noch ein paar Werte zu senden hat ... obwohl er mit mir arbeitet, sagt ich explizit "müssen zukünftige API-Anfragen mit dem oben genannten Header machen" – Jimmyt1988

46

ich damit zu kämpfen bekommen weitergegeben zuzuweisen. Ich habe immer wieder den Fehler "ungültiges Format" erhalten, weil ich eine benutzerdefinierte Implementierung habe und der Berechtigungsheader anhand bestimmter Standards validiert wurde. Hinzufügen der Header auf diese Weise jedoch funktioniert:

var http = new HttpClient(); 
http.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=XXX"); 
+2

Oh komisch, danke für die Extra-Ansatz. – Jimmyt1988

+0

Während dieser Header seltsam erscheint, ist dies das Format, in dem der Autorisierungsheader vom Google Cloud Messaging-Dienst benötigt wird, der wiederum Nachrichten an Android-Geräte sendet. –

+0

Ich brauchte eine Stunde, um das zu bekommen :(Vielen Dank. –

0

Hatte ein ähnliches Problem beim Abrufen von AuthenticationHeaderValue mit meinen Anforderungen arbeiten. Ich habe auch JWT JsonWebToken von GitHub verwendet. Ich war in der Lage, ein Token von der API zu bekommen, hatte aber Mühe, es in anderen GETs und POSTs zu verwenden.

var jwt = JsonWebToken.Encode(token, APISECRET, JwtHashAlgorithm.HS256); 
var tk = GetTokenFromApi(); // basically returns an encrypted string. 

manuell mit WebRequest: Welche fein gearbeitet.

request.ContentType = "application/json"; 
request.Method = "POST"; 
request.Headers.Set("Authorization", string.Format("Bearer {0}", tk)); 

Wenn wir zu einem Httpclient umgeschaltet wird, und verwendet, um die AuthenticationHeaderValue, konnte nicht herausfinden, wie man es einrichten correctly.After auf Antrag Zeichenfolge suchen, ich sah es die „Authorization“ für mich gegeben. Gespielt mit Parametern, und das hat schließlich funktioniert.

var authenticationHeaderValue = new AuthenticationHeaderValue("Bearer", tk);