Предварительная аутентификация .Net CF 2.0 HttpWebRequest и отправка учетных данных по первому запросу

Я пытаюсь связаться с REST API bit.ly, используя их модифицированную версию базовой аутентификации. Однако для того, чтобы это работало, HttpWebRequest должен прикрепить учетные данные к первому запросу, однако HttpWebRequest не будет отправлять учетные данные по первому запросу и будет ждать 401, прежде чем отправлять какие-либо учетные данные, даже если для PreAuthenticate установлено значение true (с PreAuthenticate он будет отправлять учетные данные для всех последующих запросов).

Я попытался сделать так, чтобы HttpWebRequest работал так, как этого требует bit.ly:

(1) Отправьте запрос в формате http://username:[email protected]/method .

Не поддерживается bit.ly (поскольку это поддельная реализация базовой аутентификации, они проверяют только заголовок).

(2) Вручную вставьте заголовок «Авторизация» в HttpWebRequest.

Невозможно в .Net CF, так как заголовок авторизации защищен, и любая попытка изменить значение защищенного заголовка завершается ошибкой и вызывает исключение ArgumentException.

(3) Наследовать HttpWebRequest или WebRequest в другом классе, чтобы реализовать требуемое поведение.

Невозможно, так как класс HttpWebRequest по умолчанию зарегистрирован для обслуживания запросов для схем HTTP и HTTPS. Попытки зарегистрировать другого потомка WebRequest для этих схем не увенчаются успехом, поскольку дублирующиеся префиксы не допускаются.

Итак, у кого-нибудь есть предложения?


person Community    schedule 29.06.2009    source источник


Ответы (1)


Примечание к (2). Я использовал метод, описанный в http://blog.kowalczyk.info/article/Forcing-basic-http-authentication-for-HttpWebReq.html для ввода заголовка авторизации, и он отлично работает в .NET CF 2.0.

public void SetBasicAuthHeader(WebRequest req, String userName, String userPassword)
{
    string authInfo = userName + ":" + userPassword;
    authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
    req.Headers["Authorization"] = "Basic " + authInfo;
}
person Johan Lindqvist    schedule 06.07.2010