在Windows手机中从服务器获取结果时出现问题

时间:2013-10-17 14:28:43

标签: c# windows-phone-7 httpwebresponse

我正在使用以下代码与我的服务器进行通信

private void Save_Click(object sender, RoutedEventArgs e)
    {
        var request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Method = "POST";
        request.BeginGetResponse(new AsyncCallback(GotResponse), request);

    }
private void GotResponse(IAsyncResult asynchronousResult)
    {
      try
       {
        string data;
        HttpWebRequest myrequest = (HttpWebRequest)asynchronousResult.AsyncState;
        using (HttpWebResponse response = (HttpWebResponse)myrequest.EndGetResponse(asynchronousResult))
        {
            System.IO.Stream responseStream = response.GetResponseStream();
            using (var reader = new System.IO.StreamReader(responseStream))
            {
                data = reader.ReadToEnd();
            }
            responseStream.Close();
        }
        this.Dispatcher.BeginInvoke(() =>
        {
            MessageBox.Show(data);
        });
      }
      catch (Exception e)
        {
            var we = e.InnerException as WebException;
            if (we != null)
            {
                var resp = we.Response as HttpWebResponse;
                var code = resp.StatusCode;
                this.Dispatcher.BeginInvoke(() =>
                    {
                        MessageBox.Show("Message :" + we.Message + " Status : " + we.Status);
                    });
            }
            else
                throw;
        }
    }

我将日期和金额作为输入值,它是url编码的。如果我的所有数据都有效,那么一切正常。所以我的服务器将提供数据

{
 "code":0,
 "message":"Success",
 "data":{
         "date":xxxx,
         "amount":123
        }
}

但是如果给出一个无效的值,(例如: abcd 代表'amount'),那么我的服务器将回复为

{
 "code":2,
 "message":"Invalid value passed"
}

在这种情况下,执行行

之后
using (HttpWebResponse response = (HttpWebResponse)myrequest.EndGetResponse(asynchronousResult))

跳转到捕捉,然后显示

Message:The remote server returned an error:NotFound. Status:UnKnown Error

必需的解决方案:它应该像前一种情况一样获取结果。 我做了什么来修复它?

1 个答案:

答案 0 :(得分:1)

很可能HTTP状态代码是404.您已经在错误代码中访问了响应 - 您需要做的就是尝试将其解析为JSON,就像您在成功案例中一样,而不是使用we.Message显示错误消息。您可能已准备好将内容设置为空或不包含有效的JSON,并且只对您期望仍然返回JSON的特定状态代码执行此操作。