RestSharp на Windows Phone с параметрами запроса

Я работаю над клиентом Windows phone для одной службы с API Oauth1.

В документах API у меня есть что-то вроде этого:

url: http://example.com/iphone/json/users/

method: GET

параметры: page_num=[int] - номер страницы, >=1, по умолчанию=1.

Для номера страницы по умолчанию все работает хорошо:

        RestClient HabraClient = new RestClient("http://habrahabr.ru");
        HabraClient.Authenticator = OAuth1Authenticator.ForProtectedResource("xxx", "yyyyyy", App.Tokens.Key, App.Tokens.Secret);
        var TokenRequest = new RestRequest("/iphone/json/users/", Method.GET);

        HabraClient.ExecuteAsync(TokenRequest, (response =>
        {
            try
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {

Когда я выполняю этот запрос, я получаю правильный ответ с данными. Но если я добавляю параметр (раскомментируйте TokenRequest.AddParameter("page_num", 2); ), я получаю "Неверная подпись". Я пытался отправить как int, так и строковый параметр.

        var TokenRequest = new RestRequest("/iphone/json/users/", Method.GET);

        TokenRequest.AddParameter("page_num", 2);

        HabraClient.ExecuteAsync(TokenRequest, (response =>
        {
            try
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {

Я получаю сообщение "Неверная подпись". Я тоже пробовал строковый параметр:

        TokenRequest.AddParameter("page_num", "2");

Поставщик API сказал мне, что у меня проблема с базовой строкой подписи http://oauth.net/core/1.0/#sig_base_example Итак, как я могу его просмотреть? Или, может быть, вы можете помочь мне решить всю эту проблему?


person Ponf    schedule 13.03.2012    source источник
comment
можете ли вы опубликовать более полные примеры рабочей версии и нерабочей версии?   -  person John Sheehan    schedule 13.03.2012
comment
Как вы генерируете подпись?   -  person Matt Lacey    schedule 13.03.2012
comment
Джон, я обновил пост. Мэтт, подпись генерируется API, и я пытаюсь найти способ, как увидеть ее в отладчике :)   -  person Ponf    schedule 13.03.2012
comment
Вы могли видеть, что подпись создается чем-то вроде Fiddler. Возможно, их алгоритм подписи не совпадает с алгоритмом в RestSharp (я видел, что некоторые API имеют тонкие различия). Кроме того, если вы просто жестко закодируете значение строки запроса в параметре URL-адреса конструктора RestRequest, это исправит это?   -  person John Sheehan    schedule 14.03.2012
comment
OAuth 1 нужны параметры URL и параметры form-urlencoded для создания подписи.   -  person bbaia    schedule 14.03.2012
comment
Насколько я знаю, Restsharp автоматически кодирует параметры.   -  person Ponf    schedule 14.03.2012


Ответы (1)


Я думаю, вы нарушаете структуру запроса... лучше проверить запрос через Fiddler, но попробуйте написать что-то вроде

var TokenRequest = new RestRequest("/iphone/json/users/?page_num=2", Method.GET);

вместо

var TokenRequest = new RestRequest("/iphone/json/users/", Method.GET);

TokenRequest.AddParameter("page_num", 2);

Надеюсь, это поможет.

person kazarindn    schedule 29.03.2012