2015-02-18 2 views
0

У меня возникают проблемы с HttpWebRequest/Response, когда я пытаюсь выполнить вызовы API.HttpWebResponse 401-error Неавторизованный

API использует JSON/Ajax для совершения звонков, но мне нужно совершать вызовы через HttpWebRequest/Response, которые я не совсем понимаю, и я думаю, что пропускаю неправильный токен доступа.

Вот мой текущий код, который я получил от учебника:

 byte[] buffer = Encoding.ASCII.GetBytes("username=User&password=Password"); 

     HttpWebRequest WebReq =(HttpWebRequest)WebRequest.Create("http://api40.maildirect.se/User/Authorize"); 

     WebReq.Method = "POST"; 
     WebReq.ContentType = "application/x-www-form-urlencoded"; 
     WebReq.ContentLength = buffer.Length; 

     Stream PostData = WebReq.GetRequestStream(); 

     PostData.Write(buffer, 0, buffer.Length); 
     PostData.Close(); 

     HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse(); 

     var status = WebResp.StatusCode; (returns OK) 

     Stream _Answer = WebResp.GetResponseStream(); 
     StreamReader Answer = new StreamReader(_Answer); 

     //Here I try to make another request, do I need to make another instance? 
     WebReq = (HttpWebRequest)WebRequest.Create("http://api40.maildirect.se/Contacts?&select=ContactId,FirstName,LastName"); 
     WebReq.Method = "GET"; 
     WebReq.ContentType = "text/json; charset=utf-8"; 
     WebReq.Headers.Add("Authorization", Answer.ReadToEnd()); 

     HttpWebResponse WebResp2 = (HttpWebResponse)WebReq.GetResponse(); 

     ^This is where it breaks because I'm not authorized. 

И только полезная документация из API является то, что мне нужно передать маркер доступа при выполнении дополнительных вызовов, но я подозреваю, что я m пропускает неправильный токен.

Заранее спасибо

кастрировать

+0

Просто потому, что статус «WebResp.StatusCode», возвращаемый статус 200, не обязательно означает, что ваша аутентификация сработала. Вам нужно проверить содержимое ответа. – DavidG

+0

Я получаю доступ к CanRead, есть ли что-нибудь еще, что требуется? – deSex

+0

У вас уже есть поток в 'Ответ', что там? – DavidG

ответ

0

Я посылал HttpWebResponse как знак, вместо строки, в результате из StreamReader. Я создал новую переменную, называемую токеном, с этим строковым значением и добавила ее в заголовок «Авторизация», как и должно быть.

 byte[] buffer = Encoding.ASCII.GetBytes("username=Username&password=Password"); 
     HttpWebRequest WebReq = (HttpWebRequest) WebRequest.Create("http://api40.maildirect.se/User/Authorize"); 

     WebReq.Method = "POST"; 
     WebReq.ContentType = "application/x-www-form-urlencoded"; 
     WebReq.ContentLength = buffer.Length; 

     Stream PostData = WebReq.GetRequestStream(); 

     PostData.Write(buffer, 0, buffer.Length); 
     PostData.Close(); 

     HttpWebResponse WebResp = (HttpWebResponse) WebReq.GetResponse(); 

     //This token variable was something I missed creating and it also had to get the " removed to work properly. 
     var token = new StreamReader(WebResp.GetResponseStream()).ReadToEnd().Replace("\"", ""); 

     WebReq = (HttpWebRequest) WebRequest.Create("http://api40.maildirect.se/Contacts"); 

     WebReq.Method = "GET"; 
     WebReq.ContentType = "application/json; charset=utf-8"; 

     // This is where another part of the problem was, sent in the wrong type to the header, but when I replaced it with the token variable it worked like a charm :) 
     //WebReq.Headers.Add("Authorization", WebResp.ToString()); 

     WebReq.Headers.Add("Authorization", token); 

     HttpWebResponse WebResp2 = (HttpWebResponse) WebReq.GetResponse();