2016-09-23 2 views
0

У меня это работало, когда это был только заголовок авторизации. Но теперь мне нужно добавить пользовательский заголовок. Я получаю сообщение об ошибке tokenResponse, в которой говорится: «HEADER OUT OF RANGE».добавление двух заголовков в HttpClient

Вот конечная информация:

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

Мой код.

  //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... 
      } 

ответ

0

При использовании DefaultRequestHeaders и попытаться добавить пользовательский заголовок, он будет пытаться проверить против известных заголовков, так что у вас есть на заказ это не удается.
Вы должны формировать Request используя HttpRequestMessage
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}" 

, а затем

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

Сделаны эти изменения, но до сих пор получить заголовок из диапазона: запроса переменных = новый HttpRequestMessage (HttpMethod.Post , новый Uri (postURL)); request.Headers.Add («X-iMem-Date», дата); request.Headers.Add («Авторизация», auth); request.Content = content; response.Content.ReadAsStringAsync(); var response = await httpclient.SendAsync (запрос); –

+0

Ваша строка даты отформатирована правильно, в формате, который ожидает сервер? –

+0

также использовать 'DateTime.UtcNow' вместо' DateTime.Now' –

Смежные вопросы