2014-05-08 15 views
5

Sto tentando di utilizzare la classe System.Net.HttpClient per inviare un messaggio a Google Cloud Messaging.Inserimento di una stringa personalizzata nell'intestazione "Autorizzazione" in System.Net.HttpClient

Google Cloud messaggio richiede di includere un'intestazione denominata "Autorizzazione", in un formato simile a questo:

key=AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D 

Ma la classe HttpClient genera un'eccezione quando provo questo.

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

L'eccezione è di tipo System.FormatException. Il messaggio è

Il formato del valore di 'key = AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w' è valido.

E lo stack è:

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) 

Come posso ottenere questa intestazione in questa richiesta post senza eccezione essere buttato?


Per inciso, ho composto un post come questo utilizzando Fiddler, e funziona:

intestazioni:

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

Richiesta di corpo:

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

Hai provato a impostare la proprietà 'Autorizzazione' sulle intestazioni invece di provare a 'Aggiungi' una nuova? –

+0

E anche 'client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("chiave", "AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w");' –

+0

@ Joel Allison: ho provato, e poi il colpo di testa viene "AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0LJ0w chiave". Non includeva il segno "=". –

risposta

4

Ecco perché il tuo valore è infrangere le specifiche HTTP.

L'intestazione deve contenere Authorization: scheme SPACE value come descritto qui: http://www.ietf.org/rfc/rfc2617.txt

Nel tuo caso:

Authorization: key AIzaSyBxFuZ9IbtGbJHX6F5wdTc1mHnB7i0Lu8D 
+2

Potrebbe rompere le specifiche, ma sfortunatamente è quello che devo inserire per far accettare il server di Google Cloud Messaging il mio messaggio. –

+2

quindi è necessario utilizzare la classe 'HttpWebRequest'. – jgauffin

+2

httpClient.DefaultRequestHeaders.TryAddWithoutValidation ("Autorizzazione", "chiave = XXX"); Vedere http://stackoverflow.com/a/24575721/143195 – JCallico

Problemi correlati