2013-11-21 6 views
2

Я пытаюсь аутентифицироваться с помощью кода ниже, чтобы silverpop, хотя я получаю код статуса 400 при попытке. Любые предложения, поскольку я не уверен, что еще попробовать ?! Я вижу, как звонок идет с помощью Fiddler, но у меня кончились идеи. Большое спасибоподключение к веб-api с помощью C#

Сервер возвращает следующее сообщение об ошибке:

фрагмент кода

 var httpWReq = (HttpWebRequest)WebRequest.Create("https://api5.silverpop.com/oauth/token"); 
     var postData = string.Format("&grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}", config.ClientId, config.ClientSecret, config.RefreshToken); 

        // Also try this string but I get the same response 
     //var postData = string.Format("?grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}", config.ClientId, config.ClientSecret, config.RefreshToken); 

     var encoding = new ASCIIEncoding(); 
     var data = encoding.GetBytes(postData); 
     httpWReq.Method = "POST"; 
     httpWReq.ContentType = "x-www-form-urlencoded"; 
     httpWReq.ContentLength = data.Length; 

     using (var stream = httpWReq.GetRequestStream()) 
     { 
      stream.Write(data, 0, data.Length); 
     } 

     var response = (HttpWebResponse)httpWReq.GetResponse(); 

     var result = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

ответ от сервера

The remote server returned an error: (400) Bad Request. 
+0

'postData' раздел не кажется хорошим !! не следует начинать с '?' вместо '&'? Также попробуйте отладки, значение для данных для проверки, содержит ли он специальный символ! –

+0

'httpWReq.ContentType =" application/x-www-form-urlencoded ";'? – walkingTarget

+0

Что вы предлагаете использовать? Спасибо –

ответ

3

Это похоже на работу:

 var httpWReq = (HttpWebRequest)WebRequest.Create("https://api5.silverpop.com/oauth/token" + string.Format("?grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}", clientId, clientSecret, refreshToken)); 
     var postData = ""; 

     var encoding = new ASCIIEncoding(); 
     var data = encoding.GetBytes(postData); 
     httpWReq.Method = "POST"; 
     httpWReq.ContentType = "x-www-form-urlencoded"; 
     httpWReq.ContentLength = data.Length; 

     using (var stream = httpWReq.GetRequestStream()) 
     { 
      stream.Write(data, 0, data.Length); 
     } 

     var response = (HttpWebResponse)httpWReq.GetResponse(); 

     var result = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
+0

спасибо за помощь –

0

Это обычно означает, что вы свяжетесь сервер неправильным образом. Возможно, вам не хватает «?» в ваших данных сообщения?

EDIT

Try:

var client = new HttpClient(); 
var content = new FormUrlEncodedContent(<put content here>); 
var response = await client.PostAsync("<your API URL>", content); 
+0

Я внес изменения, предложенные другими, которые теперь используют '?' в начале запроса, хотя я все еще получаю ту же проблему. Любые другие предложения, пожалуйста? –

1

изменение изменение попытка из

var postData = string.Format("&grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}", config.ClientId, config.ClientSecret, config.RefreshToken); 

в

var postData = string.Format("?grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}", config.ClientId, config.ClientSecret, config.RefreshToken); 
+0

спасибо, я попробовал, хотя у меня такая же проблема. –

+0

Я бы не ожидал, что данные сообщения будут иметь что-либо в начале, отличное от имени первого значения. –

0

Если вы проверяете запрос с Фидлер вы увидите параметры в теле в обоих случаях (с предшествующим & и с предшествующими? знаки).

С & знака: with & sign

С? знак: with ? sign

Правильное, что нужно сделать, это удалить? или знаки & спереди, а затем имя параметра в теле будет grant_type. Код, который работает:

var postData = string.Format("grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}", 
      config.ClientId, config.ClientSecret, config.RefreshToken); 
Смежные вопросы