2011-01-13 18 views
0

Silverlightで作成しているWebクライアントがあります。 GET/POSTリクエストとJSONを使用してサーバー上のWebサービスと通信できるようにしようとしています。 GETリクエストは正常に動作し、Silverlightの終わりでJSONを解析できます。しかし、POST要求は動作しないようです。サーバーはPOST要求があることを読み取りますが、POST配列は空です。JSONが投稿したデータがサーバーに届かない

Iveは2つのコードでPOSTリクエストを送信しようとしましたが、どちらも同じ応答を返しています - 空の配列。私が試し

最初のシルバーコードは以下のとおりであった:私が試し

public MainPage() 
    { 
     InitializeComponent(); 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://www.dipzo.com/game/services.php")); 
     request.Method = "POST"; 
     request.ContentType = "application/json"; 
     request.BeginGetRequestStream(new AsyncCallback(OnGetRequestStreamCompleted), request); 
    } 

    private void OnGetRequestStreamCompleted(IAsyncResult ar) 
    { 
     HttpWebRequest request = (HttpWebRequest)ar.AsyncState; 
     using (StreamWriter writer = new StreamWriter(request.EndGetRequestStream(ar))) 
     { 
      writer.Write("name=david"); 
     } 
     request.BeginGetResponse(new AsyncCallback(OnGetResponseCompleted), request); 
    } 

    private void OnGetResponseCompleted(IAsyncResult ar) 
    { 
     //this.GetResponseCoimpleted.Visibility = Visibility.Visible; 

     // Complete the Flickr request and marshal to the UI thread 
     using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) 
     { 
      using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
      { 
       string results = reader.ReadToEnd(); 
      } 
     } 
    } 

第二部分は以下のとおりであった:

private void WebClient_Click(object sender, RoutedEventArgs e) 
    { 
     Test t1 = new Test() { Name = "Civics", Marks = 100 }; 
     DataContractJsonSerializer jsondata = new DataContractJsonSerializer(typeof(Test)); 
     MemoryStream mem = new MemoryStream(); 
     jsondata.WriteObject(mem, t1); 
     string josnserdata = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length); 
     WebClient cnt = new WebClient(); 
     cnt.UploadStringCompleted += new UploadStringCompletedEventHandler(cnt_UploadStringCompleted); 
     cnt.Headers["Content-type"] = "application/json"; 
     cnt.Encoding = Encoding.UTF8; 
     cnt.UploadStringAsync(new Uri("http://www.dipzo.com/game/services.php"), "POST", josnserdata); 
    } 

    void cnt_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) 
    { 
     var x = e; 
    } 

サービスはPHPであり、本質的に消費するサーバー上のコード: var_dump($ _ POST)

これは、ポスト配列に入ってくるものを出力するはずです。私は単純なPHPクライアントでそれをテストしています。ただ銀色で働くことはできません。私はちょうど空の配列を取得しています。

答えて

1

あなたはまだ知られていないタイプであるコンテンツタイプへのアプリケーション/ x-www-form-urlencodedでなくアプリケーション/ JSONを変更する必要があります。

0

誰もがまだ自分の古い質問に注意を払っているとは思っていませんが、実際にサーバに到達したという問題があったと思いますが、サーバはその結果をSLアプリケーションに戻しました。これは、SL5 usingWebClient.UploadStringAsyncと同様の状況で私が見ている動作です。

私は、昨日走ったテクニックを実装しようとしています。これは、動的に構築されたSLからの実際のページ投稿を使用しています。まもなく私の所見を報告します。

UPDATE - このソリューションワークス: http://www.codeproject.com/Tips/392435/Using-HTTP-Form-POST-method-to-pass-parameters-fro

私はちょうど私のアプリケーション(MVC内部SL5)でそれをテストしてみたし、それだけで正常に動作します。 HttpContext.Request.Form ["fieldname"]を確認して、必要な値を取得してください。このテクニックを使用してJSONを送信し、生成されたWord文書をユーザーに返すことができました。

これを実装してしまえば、以前に使用しようとしていた不要なWebClientを取り除くことができました。

関連する問題