Получение ошибки при доступе к пользовательскому токену из yammer.
Я пытаюсь добавить пользователя в группу Yammer, для этого мне нужен токен пользователя, которого я хочу добавить в группу. Я использовал следующую конечную точку для доступа к пользовательскому токену
https://api.yammer.com/api/v1/oauth/tokens.json?user_id={0}& consumer_key={1}
Для consumer_key я передаю ClientID приложения yammer, которое я создал (используя проверенную учетную запись администратора).
Проблема в том, что для некоторых пользователей конечная точка работает нормально и возвращает мне ответ JSON. Но для некоторых пользователей конечная точка возвращается "Удаленный сервер вернул ошибку: (400) плохой запрос."
Пожалуйста, найдите мой код ниже
private YammerJSONUserContract GetUserDetailsFromYammer(string userID, string clientID) { YammerJSONUserContract objUser = null; try { string URL = string.Format(this.userImpersonationURL, userID, clientID); string jsonString = PostYammerJson(URL, this._adminAccessToken, "GET"); YammerJSONUserContract [] objUserCollection = Newtonsoft.Json.JsonConvert.DeserializeObject<YammerJSONUserContract[]>(jsonString); objUser = objUserCollection[0]; } catch (Exception ex) { throw ex; } return objUser; } private string PostYammerJson(string url, string accessToken, string httpMethod) { string json = string.Empty; try { HttpWebRequest YammerRequest = HttpWebRequest.Create(url) as HttpWebRequest; YammerRequest.Method = httpMethod; YammerRequest.ContentType = "application/json; odata=verbose"; YammerRequest.Accept = "application/json; odata=verbose"; YammerRequest.ContentLength = 0; YammerRequest.Headers.Add("Authorization", string.Concat("Bearer ", accessToken)); using (HttpWebResponse response = YammerRequest.GetResponse() as HttpWebResponse) { Encoding encode = Encoding.GetEncoding("utf-8"); StreamReader reader = new StreamReader(response.GetResponseStream(), encode); json = reader.ReadToEnd(); } } catch (Exception ex) { throw ex; } return json; }
Может кто-нибудь, пожалуйста, дайте мне знать, что я упускаю и почему API возвращает данные пользователя для некоторых пользователей, но не для всех.
Жду вашего ответа.
Ура Амлан
Что я уже пробовал:
Пример кода включен в сам вопрос
Richard MacCutchan
Вам нужно связаться с Yammer, чтобы узнать, в чем заключается ошибка.
Graeme_Grant
Когда вы работаете с API и получаете сообщение "удаленный сервер вернул ошибку: (400) плохой запрос", всегда существует исключение InnerException с подробным сообщением об ошибке. Пожалуйста, нажмите на кнопку "улучшить вопрос"и добавьте к нему сообщение InnerException. Если вы не уверены, как использовать "улучшить вопрос", инструкции находятся здесь: Код проекта Быстрые ответы часто задаваемые вопросы[^]
Jochen Arndt
Просто предположение:
Некоторые пользовательские строки содержат символы, которые не разрешены в веб-запросах, или используют неправильную кодировку (символы, отличные от ASCII, вероятно, должны быть закодированы в UTF-8).
Graeme_Grant
Возможно также, что он не прошел аутентификацию или запрос находится в неправильном формате. Только внутреннее исключение даст нам ключ к ответу на его вопрос...
Jochen Arndt
Поэтому я написал "просто догадка".
Он может просто проверить имена затронутых пользователей. Поскольку это происходит только для некоторых пользователей, а clientID всегда один и тот же, просмотр имен кажется разумным.
Amlan Sengupta
Я посылаю токен на предъявителя авторизации, пожалуйста, посмотрите в коде
Amlan Sengupta
извините, что говорю это...но внутреннего исключения нет..ex. InnerException равно null
Graeme_Grant
Я работаю с более чем дюжиной API, но не с Yammer. Все они имеют сообщения InnerException для 400 ответов.
Я думаю, что вы пытаетесь позвонить /users/[: id]. json · сайт разработчика Yammer[^]- используйте тест на этой странице с вашим идентификатором пользователя и используйте Fiddler-Бесплатный Прокси-Сервер Веб-Отладки-Telerik[^] чтобы запечатлеть сеанс. Повторите с вашим собственным кодом. Теперь сравните, и вы поймете, почему...
Может быть, в этом случае нет внутреннего исключения. Тогда фактическая ошибка может быть в заголовке или теле ответа. Это будет легко увидеть с помощью инструмента скрипача.