У меня есть вызов 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 error. Как я могу выполнить проверку моей строки json, чтобы увидеть, есть ли ошибка, и обработать ее? Также стоит отметить, что в этой программе есть много процессов десериализации, поэтому было бы неплохо сохранить эффективность обработки ошибок.
Любая помощь приветствуется, я новичок в c# и json, и это проблема задерживает этот проект.
Спасибо!
Редактировать: функция GetOpenZTOrderS () вызывает эту функцию запроса. Как я могу изменить это, чтобы получить также вернуть код состояния?
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();
}
}
}
}
}