2011-01-13 71 views
0

我有一个我在Silverlight中创建的Web客户端。我试图通过GET和POST请求和JSON将它与我的服务器上的Web服务进行通信。 GET请求正常工作,我能够解析Silverlight端的JSON。但POST请求似乎不起作用。服务器读取有POST请求,但POST数组为空。JSON Silverlight发布的数据未到达服务器

我试了两段代码来发送POST请求,但都导致相同的响应 - 一个空的数组。

第一Silverlight的代码我尝试是:

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客户端进行了测试,它可以工作。只是无法让它在silverlight中工作。在Silverlight中,我只是继续获得一个空数组。

回答

1

,则应该更换内容类型应用程序/ x-WWW窗体-urlencoded,而不是应用程序/ JSON这不是一个已知类型呢。

0

不是我认为任何人仍然关注他的老问题,但我敢打赌问题是它实际上到达了服务器,但是服务器将结果路由回SL应用程序。这是我看到的类似情况下使用WebClient.UploadStringAsync与SL5类似的行为。

我即将实施/测试我昨天碰到的一种技术,它使用SL中动态构建的“真实”页面帖子;我会很快汇报我的发现。

更新 - 此方法适用于: http://www.codeproject.com/Tips/392435/Using-HTTP-Form-POST-method-to-pass-parameters-fro

我只是测试它在我的应用程序(内部MVC SL5)和它的作品就好了。确保你检查HttpContext.Request.Form [“fieldname”]来获取你想要的值。我使用这种技术来提交JSON,并能够为用户返回生成的Word文档。

一旦我实现了这个功能,我就可以摆脱我之前尝试使用的不必要的WebClient。