我有一个 API 调用,它返回一个 json 格式的查询字符串。有时我会收到以下回复
"<html>\r\n<head><title>502 Bad Gateway</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>502 Bad Gateway</h1></center>\r\n</body>\r\n</html>\r\n"
我解释这个响应的代码是
string jsonOrdersString = bitmexApi.GetOpenZTOrders(25);//
List<OrderRecord> newList = JsonConvert.DeserializeObject<List<OrderRecord>>(jsonOrdersString);
这在大多数情况下都有效,直到我收到错误 502 错误。如何检查我的 json 字符串以查看是否有错误并处理它?还值得注意的是,我在这个程序中有很多反序列化进程,所以保持这个错误处理的效率会很好。
感谢任何帮助,我是 c# 和 json 的新手,这个问题阻碍了这个项目。
谢谢!
编辑:GetOpenZTOrderS() 函数调用此 Query 函数。我怎样才能修改它以获得也返回状态码?
private string Query(string method, string function, Dictionary<string, string> param = null, bool auth = false, bool json = false)
{
string paramData = json ? BuildJSON(param) : BuildQueryData(param);
string url = "/api/v1" + function + ((method == "GET" && paramData != "") ? "?" + paramData : "");
string postData = (method != "GET") ? paramData : "";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(domain + url);
webRequest.Method = method;
if (auth)
{
string expires = GetExpires().ToString();
string message = method + url + expires + postData;
byte[] signatureBytes = hmacsha256(Encoding.UTF8.GetBytes(apiSecret), Encoding.UTF8.GetBytes(message));
string signatureString = ByteArrayToString(signatureBytes);
webRequest.Headers.Add("api-expires", expires);
webRequest.Headers.Add("api-key", apiKey);
webRequest.Headers.Add("api-signature", signatureString);
}
try
{
if (postData != "")
{
webRequest.ContentType = json ? "application/json" : "application/x-www-form-urlencoded";
var data = Encoding.UTF8.GetBytes(postData);
using (var stream = webRequest.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
using (WebResponse webResponse = webRequest.GetResponse())
using (Stream str = webResponse.GetResponseStream())
using (StreamReader sr = new StreamReader(str))
{
return sr.ReadToEnd();
}
}
catch (WebException wex)
{
using (HttpWebResponse response = (HttpWebResponse)wex.Response)
{
if (response == null)
throw;
using (Stream str = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(str))
{
return sr.ReadToEnd();
}
}
}
}
}