1

Je tente de communiquer avec l'API REST de bit.ly en utilisant leur version modifiée de l'authentification de base. Toutefois, pour que cela fonctionne HttpWebRequest doit attacher les informations d'identification à la première requête, cependant, HttpWebRequest n'enverra pas d'informations d'identification sur la première requête et attendra un 401 avant d'envoyer des informations d'identification même si PreAuthenticate est défini sur true (avec PreAuthenticate it enverra des informations d'identification pour toutes les demandes ultérieures)..Net CF 2.0 HttpWebRequest pré-authentification et envoi des informations d'identification à la première demande

J'ai essayé ce qui suit pour obtenir HttpWebRequest pour travailler comme il faut bit.ly il:

(1) Envoyer la demande au format http://username:[email protected]/method.

Non pris en charge par bit.ly (comme il s'agit d'une fausse implémentation de l'authentification de base, ils vérifient uniquement l'en-tête). (2) Injecter manuellement l'en-tête "Authorization" dans HttpWebRequest.

Impossible dans le .Net CF car l'en-tête Authorization est protégé et toute tentative de modification d'une valeur d'en-tête protégée échoue et déclenche une exception ArgumentException.

(3) Héritez HttpWebRequest ou WebRequest dans une autre classe afin d'implémenter le comportement requis.

Impossible car la classe HttpWebRequest est enregistrée pour traiter les demandes de schémas HTTP et HTTPS par défaut. Les tentatives d'enregistrement d'un autre descendant WebRequest pour ces schémas échoueront car les préfixes en double ne sont pas autorisés.

Alors, quelqu'un a-t-il des suggestions?

Répondre

1

Une note sur (2). J'ai utilisé la méthode décrite au http://blog.kowalczyk.info/article/Forcing-basic-http-authentication-for-HttpWebReq.html pour injecter un en-tête d'autorisation et cela fonctionne très bien dans .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; 
} 
Questions connexes