Использование HttpClient с RightScale API - PullRequest
4 голосов
/ 25 декабря 2009

Я пытаюсь использовать WCF Rest Starter Kit с API входа RightScale , который кажется довольно простым в использовании.

Редактировать - вот блог запись Я писал об использовании Powershell для использования API.

Правка - Создана универсальная оболочка .NET для RightScale API - NRightAPI

Это так же просто, как выглядит при использовании CURL. Все, что мне нужно, чтобы получить cookie для входа в систему, это:

curl -v -c rightcookie -u имя пользователя: пароль "https://my.rightscale.com/api/acct/accountid/login?api_version=1.0"

И я получаю следующее печенье:

HTTP / 1.1 204 Дата без содержимого: пт, 25
Дек 2009 12:29:24 GMT Сервер: Mongrel 1.1.3 Статус: 204 Нет содержимого X-Runtime: 0,06121
Тип содержимого: текст / html; charset = utf-8
Длина содержимого: 0
Контроль кэша: no-cache
Добавлен cookie _session_id = "488a8d9493579b9473fbcfb94b3a7b8e5e3" для домена my.rightscale.com, путь /, истекает 0
Set-Cookie: _session_id = 488a8d9493579b9473fbcfb94b3a7b8e5e3; Путь = /; безопасный Варь: Accept-Encoding

Однако, когда я использую следующий код C #:

HttpClient http = new HttpClient ("https://my.rightscale.com/api/accountid/login?api_version=1.0");
http.TransportSettings.UseDefaultCredentials = ложь;
http.TransportSettings.MaximumAutomaticRedirections = 0;
http.TransportSettings.Credentials = новый NetworkCredential ("имя пользователя", "пароль");
ЕЫпе (http.Get () Content.ReadAsString ().);

Вместо HTTP 204 я получаю перенаправление:

Вы находитесь href = "https://my.rightscale.com/dashboard">redirected

Как мне заставить стартовый комплект WCF REST работать с RighScale API?

1 Ответ

6 голосов
/ 26 декабря 2009

Мне нужно было добавить заголовок «Авторизация: Основные» в мой запрос.

В дополнение к исходному коду, который я разместил:

HttpClient http = new HttpClient ("https://my.rightscale.com/api/acct/accountid/login?api_version=1.0");
http.TransportSettings.UseDefaultCredentials = false;
http.TransportSettings.MaximumAutomaticRedirections = 0;
http.TransportSettings.Credentials = new NetworkCredential ("имя пользователя", "пароль");

Мне нужно добавить заголовок авторизации вместе с запросом REST с именем пользователя / паролем следующим образом:

byte [] authbytes = Encoding.ASCII.GetBytes (string.Concat ("имя пользователя", ":", "пароль"));
строка base64 = Convert.ToBase64String (authbytes);
string authorization = string.Concat («Авторизация: базовая», base64);
http.DefaultHeaders.Add (авторизация);

А потом, когда я сделал запрос:

еЫп (http.Get () Content.ReadAsString ().);

Я получил HTTP 204 вместе с файлом cookie сеанса, который я искал. Что тут скажешь, Скрипач это круто :)!

...