0

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

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 for '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

必需的解决方案:它应该像在前一个案例中那样获取结果。我该怎么做才能修复它?

4

1 回答 1

1

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

于 2013-10-17T14:33:52.147 回答