Amlan Sengupta Ответов: 0

Получение ошибки при доступе к пользовательскому токену из 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[^] чтобы запечатлеть сеанс. Повторите с вашим собственным кодом. Теперь сравните, и вы поймете, почему...

Может быть, в этом случае нет внутреннего исключения. Тогда фактическая ошибка может быть в заголовке или теле ответа. Это будет легко увидеть с помощью инструмента скрипача.

0 Ответов