Использование HttpClient с API RightScale
Я пытаюсь использовать 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
Content-Type: text / html; кодировка = UTF-8
Длина контента: 0
Cache-Control: без кеша
Добавлен файл 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 = false;
http.TransportSettings.MaximumAutomaticRedirections = 0;
http.TransportSettings.Credentials = new NetworkCredential ("имя пользователя", "пароль");
ЕЫпе (http.Get() Content.ReadAsString().);
Вместо HTTP 204 я получаю перенаправление:
Вы href="https://my.rightscale.com/dashboard"> перенаправлены
Как мне получить стартовый комплект WCF REST, работающий с RighScale API?
1 ответ
Мне нужно было добавить заголовок "Authorization: Basic " к моему запросу.
В дополнение к исходному коду я разместил:
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 сеанса, который я искал. Что тут скажешь, Фиддлер классный:)!