2009-05-23 5 views
0

Je dois communiquer avec une application PHP existante. L'API est juste un script PHP qui accepte les requêtes et renvoie une réponse en XML.Comment faire pour déclencher une requête GET sur un pseudo service REST en C#

Je voudrais écrire la communication en C#.

Quelle serait la meilleure approche pour déclencher une requête GET (avec de nombreux paramètres), puis analyser le résultat?

Idéalement je voudrais trouver quelque chose facile que le code python ci-dessous:

params = urllib.urlencode({ 
    'action': 'save', 
    'note': note, 
    'user': user, 
    'passwd': passwd, 
}) 

content = urllib.urlopen('%s?%s' % (theService,params)).read() 
data = ElementTree.fromstring(content) 
... 

MISE À JOUR: Je pense à l'aide XElement.Load mais je ne vois pas un moyen de construire facilement la requête GET.

Répondre

1

Il existe quelques bonnes classes d'utilitaires dans le WCF REST Starter Kit, pour implémenter des clients .NET REST qui appellent des services implémentés sur n'importe quelle plate-forme.

Here's a video qui décrit comment utiliser les pièces côté client.

fragment de code Exemple:

HttpClient c = new HttpClient("http://twitter.com/statuses"); 
c.TransportSettings.Credentials = 
    new NetworkCredentials(username, password); 
// make a GET request on the resource. 
HttpResponseMessage resp = c.Get("public_timeline.xml"); 
// There are also Methods on HttpClient for put, delete, head, etc 
resp.EnsureResponseIsSuccessful(); // throw if not success 
// read resp.Content as XElement 
resp.Content.ReadAsXElement(); 
0

Un simple System.Net.Webclient est fonctionnellement similaire à pythonurllib.

Le C# exemple (forme légèrement modifié l'arbitre ci-dessus) montre comment "le feu d'une requête GET":

using System; 
using System.Net; 
using System.IO; 
using System.Web; 

public class Test 
{ 
    public static String GetRequest (string theService, string[] params) 
    { 
     WebClient client = new WebClient(); 

     // Add a user agent header in case the 
     // requested URI contains a query. 

     client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

     string req = theService + "?"; 
     foreach(string p in params) 
      req += HttpUtility.UrlEncode(p) + "&"; 
     Stream data = client.OpenRead (req.Substring(0, req.Length-1) 
     StreamReader reader = new StreamReader (data); 
     return = reader.ReadToEnd(); 
    } 
} 

Pour analyser le résultat, les classes utilisation system.xml, ou mieux - System.Xml.Linq classes. Une possibilité directe est la méthode XDocument.Load(TextReader) - vous pouvez utiliser directement le flux WebClient retourné par OpenRead().

+0

Je ne sais pas vous mieux builder URL pour .net? L'URL que vous construisez est invalide. Malgré cela, vous utilisez "?" Au lieu de "&" vous n'avez pas échappé aux params. De sorte que vous pouvez facilement vous retrouver avec des paramètres tronqués. –

+0

Désolé, l'exemple a été modifié pour utiliser HttpUtility.UrlEncode (String, Encoding) – gimel

+1

Il y a un générateur d'URL, je pense, inclus dans le kit de démarrage WCF REST. – Cheeso

Questions connexes