2014-05-08 6 views
5

Ich versuche, die System.Net.HttpClient Klasse zu verwenden, um eine Nachricht an Google Cloud Messaging zu senden.Eine benutzerdefinierte Zeichenfolge in den Header "Authorization" in System.Net.HttpClient eingeben

Google Cloud Nachricht erfordert, dass Sie einen Header enthalten namens „Autorisierung“, in einem ähnlichen Format wie folgt aus:

key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D 

Aber die HttpClient Klasse löst eine Ausnahme aus, wenn ich das versuchen.

string keyString = "key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w"; 
using (var client = new HttpClient()) 
{ 
    client.DefaultRequestHeaders.Add("Foo", keyString); // <== Proving I can 
    client.DefaultRequestHeaders.Add("Authorization", keyString); // Exception thrown 

Die Ausnahme ist vom Typ System.FormatException. Die Botschaft ist

Das Format der Wert 'key = AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w' ist ungültig.

Und die Aufrufliste ist:

at System.Net.Http.Headers.HttpHeaderParser.ParseValue(String value, Object storeValue, Int32& index) 
at System.Net.Http.Headers.HttpHeaders.ParseAndAddValue(String name, HeaderStoreItemInfo info, String value) 
at System.Net.Http.Headers.HttpHeaders.Add(String name, String value) 

Wie kann ich diesen Header in diese Post-Anforderung ohne eine Ausnahme geworfen bekommen?


Übrigens habe ich komponiert habe einen Beitrag wie diese Fiddler verwenden, und es funktioniert:

Headers:

User-Agent: Fiddler 
Authorization: key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D 
Host: android.googleapis.com 
Content-Length: 220 
Content-Type: application/json 

Anfrage Körper:

{ 
"registration_ids" : ["APA91bEM6XPdiZv5VgNNApakfyYfZwB871018Hljl1L27kaPvksasnR0bHlmcCZFxOSPD6bDLMZgvgfT9xsKnF6Tg0oSQM2cMM1KRbuK7cR7jICqAnSDYg_SvERTzPMT8puXGTlVkEVH6dsneBkXiBu6pZikWXWyRATAVbXnAHTe20-nQerb0"], 
} 
+0

Haben Sie versucht, die 'Authorization' -Eigenschaft auf den Headern zu setzen, statt zu versuchen, eine neue hinzuzufügen? –

+0

Und auch 'client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("key", "AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w");' –

+0

@ Joel Allison: Ich habe versucht, das, und dann der Header "Schlüssel AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w" war. Es enthielt das '=' Zeichen nicht. –

Antwort

4

Das ist, weil Ihr Wert ist Unterbrechen der HTTP-Spezifikation.

sollte Der Header Authorization: scheme SPACE value enthalten, wie sie hier beschrieben: http://www.ietf.org/rfc/rfc2617.txt

In Ihrem Fall:

Authorization: key AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D 
+2

Es könnte die Spezifikation sprengen, aber leider muss ich den Google Cloud Messaging-Server akzeptieren meine Nachricht. –

+2

Dann müssen Sie stattdessen die 'HttpWebRequest' Klasse verwenden. – jgauffin

+2

httpClient.DefaultRequestHeaders.TryAddWithoutValidation ("Authorization", "key = XXX"); Siehe http://stackoverflow.com/a/24575721/143195 – JCallico

Verwandte Themen