我正在使用以下代码与我的服务器进行通信
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
必需的解决方案:它应该像前一种情况一样获取结果。 我做了什么来修复它?
答案 0 :(得分:1)
很可能HTTP状态代码是404.您已经在错误代码中访问了响应 - 您需要做的就是尝试将其解析为JSON,就像您在成功案例中一样,而不是使用we.Message
显示错误消息。您可能已准备好将内容设置为空或不包含有效的JSON,并且只对您期望仍然返回JSON的特定状态代码执行此操作。