drupal Web サイトからサインインできるフォームを C#.net で作成したいと考えています。Service 3.x モジュールが有効になっており、Rest サーバーが Web サイトで正しく実行されています。私の唯一の問題は、ユーザー名とパスワードを json 形式にシリアル化する方法ですか?
1031 次
2 に答える
1
最後に解決策:
私はウィンドウフォームを持っており、テキストボックス、マスクされたテキストボックス、およびボタン(以下ではbutton3と呼ばれます)が含まれています。
ボタン クリック イベントでは、テキスト ボックスと maskedtextbox の内容が、このクラスを使用して構築されたユーザー オブジェクトに配置されます。
class User
{
public string username;
public string password;
public string name;
public string number;
public string address;
public string email;
public User(string user, string pass, string name = "", string number = "", string address = "", string email = "")
{
this.username = user;
this.password = pass;
this.name = name;
this.number = number;
this.address = address;
this.email = email;
}
}
次に、 Json.netライブラリを使用して、このオブジェクトを json モデルに変換しました
残りの部分では、着信 Cookie が cookieJar に保存されるリクエストを作成し、残りのリクエストでは、この cookieContainer をリクエスト cookieContainer にコピーする必要があり、ログインしたままになります。これはコードの残りの部分です。
private void button3_Click(object sender, EventArgs e)
{
CookieContainer cookieJar = new CookieContainer();
User user = new User(textBox1.Text,maskedTextBox1.Text);
string url = "http://"your-web-address"/"your-rest-service"/?q="your-resurce"/user/login.json";
try
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "POST";
request.CookieContainer = cookieJar;
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string query = JsonConvert.SerializeObject(user);
streamWriter.Write(query);
streamWriter.Flush();
streamWriter.Close();
}
var response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
}
//Check to see if you're logged in
url = "http://web-address/rest-server/?q=resurce/system/connect.json";
var newRequest = (HttpWebRequest)WebRequest.Create(url);
newRequest.CookieContainer = cookieJar;
newRequest.ContentType = "application/json";
newRequest.Method = "POST";
var newResponse = (HttpWebResponse)newRequest.GetResponse();
using (var newStreamReader = new StreamReader(newResponse.GetResponseStream()))
{
var newResponseText = newStreamReader.ReadToEnd();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(), "Can't access server");
}
}
注: 2 番目の要求は、drupal が私を認識しているかどうかをテストするためのものです。
于 2013-04-29T17:13:19.830 に答える