2009-05-23 9 views
0

従来のPHPアプリケーションと通信する必要があります。 APIはget要求を受け入れ、XMLとして応答を返すだけのPHPスクリプトです。C#で擬似RESTサービス経由でGETリクエストを発生させる方法

私はC#でコミュニケーションを書いています。

GETリクエストを(多くのパラメータで)起動し、結果を解析するにはどうすればよいでしょうか?

理想的には、私は以下のPythonコードとして簡単に何かを見つけるしたいと思います:

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

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

はUPDATE: 私はXElement.Loadを使用して考えているが、私はへの道が表示されませんGETクエリを簡単に構築できます。

答えて

1

WCF REST Starter Kitには、どのプラットフォームでも実装されているサービスを呼び出す.NET RESTクライアントを実装するための優れたユーティリティクラスがいくつかあります。

Here's a videoには、クライアント側の部分の使用方法が記載されています。

サンプルコード:

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

単純なSystem.Net.Webclientは、pythonurllibと機能的に似ています。 System.Xml.Linqクラス - るSystem.XMLクラス、またはそれを使用して、結果を解析する

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(); 
    } 
} 

C#例(わずかに編集フォーム上記REF)は、 "GETリクエストを発射" する方法を示しています。直接可能な方法はXDocument.Load(TextReader)メソッドです。によって返されたWebClientストリームを直接使用することができます。

+0

あなたは.NETのための任意のより良いURLビルダーを知らないのですか?あなたが構築しているURLは無効です。それにもかかわらず、 "?" "&"の代わりにあなたはparamsをエスケープしていません。したがって、切り捨てられたパラメータで簡単に終わることができます。 –

+0

申し訳ありませんが、HttpUtility.UrlEncode(String、Encoding)を使用するように変更されました – gimel

+1

WCF RESTスターターキットの一部としてURLビルダーが含まれていると思います。 – Cheeso

関連する問題