2010-11-13 3 views
0

Cela me rend un peu fou. J'essaie de faire quelque chose de simple, et je l'ai déjà fait plusieurs fois. J'essaie juste d'appeler une API REST.C# WebRequest ne fonctionnera pas avec ce lien de LinkShare

J'essaie d'appeler GetMessage avec point final = « http://feed.linksynergy.com/productsearch?token=717f8c8511725ea26fd5c3651f32ab187d8db9f4b208be781c292585400e682d & mot-clé = DVD », et il revient sans cesse chaîne vide. Si je le passe tout autre URL valide, cela fonctionnera. Mais si je ne fais que copier et coller l'URL d'origine dans le navigateur Web, ça va bien!

Est-ce qu'un développeur intelligent peut me dire ce qui se passe?

Code ci-dessous. Merci d'avance.

James

chaîne publique GetMessage (string endPoint) { HttpWebRequest demande = CreateWebRequest (endPoint);

 using (var response = (HttpWebResponse)request.GetResponse()) 
     { 
      var responseValue = string.Empty; 

      if (response.StatusCode != HttpStatusCode.OK) 
      { 
       string message = String.Format("POST failed. Received HTTP {0}", response.StatusCode); 
       throw new ApplicationException(message); 
      } 

      // grab the response 
      using (var responseStream = response.GetResponseStream()) 
      { 
       using (var reader = new StreamReader(responseStream)) 
       { 
        responseValue = reader.ReadToEnd(); 
       } 
      } 

      return responseValue; 
     } 
    } 

privé HttpWebRequest CreateWebRequest (string endPoint) {var demande = (HttpWebRequest) WebRequest.Create (endPoint);

 request.Method = "GET"; 
     request.ContentLength = 0; 
     request.ContentType = "text/xml"; 

     return request; 
    } 
+0

Malheureusement, votre code fonctionne pour moi. Récupère un document XML de 30278 caractères; pas sûr de ce qui pourrait arriver de votre côté. –

+0

Les chances sont que vous rencontrez une sorte de problème de cache/proxy. Cela fonctionne-t-il sur toute autre machine à laquelle vous pouvez accéder? – Gabe

Répondre

0

Je ne sais pas pourquoi votre mise ContentLength/ContentType - qui est généralement pour HTTP POST, où il y a un corps de demande pour laquelle vous écrivez des données à travers un flux.

Ceci est un HTTP GET, donc il n'y a pas de corps de la demande. (Juste URI w/chaîne de requête)

Cela devrait fonctionner:

using System; 
using System.IO; 
using System.Net; 
using System.Text; 

// Create the web request 
HttpWebRequest request = WebRequest.Create("http://www.someapi.com/") as HttpWebRequest; 

// Get response 
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
{ 
    // Get the response stream 
    StreamReader reader = new StreamReader(response.GetResponseStream()); 

    // Console application output 
    Console.WriteLine(reader.ReadToEnd()); 
} 

EDIT

@Gabe est également tout à fait raison - essayez ceci sur un autre ordinateur, qui est n'est pas derrière tout type de pare-feu/serveur proxy.

Mon travail PC était derrière un serveur proxy, donc pour faire des appels HTTP REST, je devais le faire:

var proxyObject = new System.Net.WebProxy("http://myDomain:8080/", true); 
System.Net.WebRequest req = System.Net.WebRequest.Create("http://www.someapi.com/"); 
req.Proxy = proxyObject; 
proxyObject.Credentials = New System.Net.NetworkCredential("domain\username","password") 
+0

Merci pour les commentaires les gars. @ RPM1984, cela ne fait aucune différence lorsque je supprime les instructions définies ContentLength/ContentType. –

+0

@Gabe, mon ordinateur n'est derrière aucun pare-feu ou proxy. De plus, si je pointe l'URL sur autre chose, cela fonctionne. Il semble que ça ne marchera pas avec cette URL. Encore plus bizarre est que si j'utilise un navigateur Web pour pointer vers cette URL, puis enregistrez le XML et le mettre en place sur cassini, repoint l'URL de cassini dans le même fichier, cela fonctionnerait! Cela me rend fou! –

+0

Le mystère continue ... si je délibère rendre le jeton dans l'URL invalide, alors je peux lire une réponse de retour! Sinon, je reçois une chaîne vide quand j'appelle reader.ReadToEnd(); –

Questions connexes