2016-09-23 2 views
0

Ich hatte dies funktioniert, wenn es nur die Autorisierung Header war. Aber jetzt musste ich einen benutzerdefinierten Header hinzufügen. Ich erhalte einen Fehler in der TokenResponse, die sagt "HEADER OUT OF RANGE".Hinzufügen von zwei Header zu HttpClient

Hier ist der Endpunkt Informationen:

URI: https://api.xyzcompany.com/api/v10/proxyUserToken 
METHOD: POST 
Params: email 
Required headers: X-iMem-Date, Authorization 

My-Code.

  //get current date and time 
      DateTime dt = DateTime.Now; 
      string date = string.Format("{0:ddd}, {0: dd MMM yyyy HH:mm:ss} GMT", dt); 

      //hash together for header 
      string strToHash = secret + date + "[email protected]"; 
      string hash = SHA.Generate256string(strToHash); 

      //setup the values we need to post 
      var values2 = new Dictionary<string, string>(); 
      values2.Add("email", "[email protected]"); 
      var content2 = new FormUrlEncodedContent(values2); 

      //setup the auth header 
      string auth = string.Format("IMEM {0}:{1}", token, hash); 

      //setup client and add the headers 
      HttpClient client2 = new HttpClient(); 
      client2.BaseAddress = new Uri(postURL); 
      client2.DefaultRequestHeaders.Add("X-iMem-Date", date); 
      client2.DefaultRequestHeaders.Add("Authorization", auth); 

      //post and get responses 
      HttpResponseMessage response2 = await client2.PostAsync(new Uri(postURL), content2); 
      var tokenresponse = await response2.Content.ReadAsStringAsync(); 
      if (response2.IsSuccessStatusCode) 
      { 
       ...do stuff... 
      } 

Antwort

0

Wenn Sie DefaultRequestHeaders verwenden und versuchen, einen benutzerdefinierten Header hinzuzufügen, wird es versuchen, gegen bekannte Header zu validieren, da das, was Sie haben, ist es Brauch ausfällt.
sollten Sie das Formular RequestHttpRequestMessage
https://msdn.microsoft.com/en-us/library/system.net.http.headers.httprequestheaders(v=vs.118).aspx

var request = new HttpRequestMessage(HttpMethod.Post, new Uri(requestUrl)); 
request.Headers.Add("Your-Custom-Header", "Value"); 
request.Content = "{your request content}" 

und dann

var response = await httpClient.SendAsync(request); 
+0

Hergestellt diese Änderungen mit, aber immer noch Kopf außer Reichweite erhalten: var request = new HttpRequestMessage (HttpMethod.Post , neuer Uri (postURL)); request.Headers.Add ("X-iMem-Datum", Datum); request.Headers.Add ("Authorization", auth); request.Content = Inhalt; Antwort.Content.ReadAsStringAsync(); var Antwort = erwarten httpclient.SendAsync (Anfrage); –

+0

ist Ihre Datumszeichenfolge richtig formatiert, in dem Format, das der Server erwartet? –

+0

verwenden Sie auch 'DateTime.UtcNow' anstelle von' DateTime.Now' –

Verwandte Themen