Dans mon application WinPhone, j'accède à un service REST. Au début j'utilisais ce code:Erreur WebFormulaire NotFound mais utilisation de HttpWebRequest/Réponse
WebClient wc = new WebClient();
wc.Credentials = credentials;
wc.Headers["App-Key"] = appKey;
wc.DownloadStringCompleted +=
(o, args) => MessageBox.Show(args.Error == null ? "OK" : "Error");
wc.DownloadStringAsync(uri);
, mais il a soudainement cessé de fonctionner me retourner un « Le serveur distant a renvoyé une erreur: NotFound » erreur. Après une session google et quelques clics dans le panneau de configuration, je n'ai pas réussi à le faire fonctionner. Je décidé d'essayer cette autre façon:
HttpWebRequest request = HttpWebRequest.CreateHttp(uri);
request.Credentials = credentials;
request.Headers["App-Key"] = appKey;
request.BeginGetResponse(asResult =>
{
var response = request.EndGetResponse(asResult) as HttpWebResponse;
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
Dispatcher.BeginInvoke(
() => MessageBox.Show(response.StatusCode.ToString()));
}, null);
et il fonctionne.
J'ai aussi essayé de courir le premier Snipped pointant l'URI vers la page d'accueil de Google et il fonctionne (je devais supprimer les informations d'identification, bien sûr).
Quelqu'un peut-il expliquer ce qui se passe?
MISE À JOUR
j'ai réussi à le faire fonctionner en remplaçant le
wc.Credentials = new NetworkCredentials(username, password);
avec
wc.Headers["Authorization"] = "Basic someBase64encodedString";
mais je me demande encore ce qui est arrivé et quelles sont les différences entre la première et la deuxième ligne.
PS: l'URI test est: https://api.pingdom.com/api/2.0/checks mais vous aurez besoin d'une application clé d'eux.