public static TasksQueryResult GetTasks(int page = 1, string sortField = "", bool sortDesc = false) { string responce = string.Empty; string request = new string(baseUrl); request += string.Format("?developer={0}", developerName); request += string.Format("&page={0}", page); if (!string.IsNullOrWhiteSpace(sortField)) { request += string.Format("&sort_field={0}", sortField); request += string.Format("&sort_direction={0}", (sortDesc ? "desc" : "asc")); } var req = WebRequest.CreateHttp(request); req.Method = "GET"; req.ContentType = "multipart/form-data"; TasksQueryResult result = new TasksQueryResult(); try { using (var resp = req.GetResponse() as HttpWebResponse) { if (resp == null || resp.StatusCode != HttpStatusCode.OK) { result.result = "Unable to request data"; return(result); } using (var rs = resp.GetResponseStream()) { using (StreamReader sr = new StreamReader(rs)) { responce = sr.ReadToEnd(); } } } } catch (WebException) { result.result = "API Request error"; return(result); } // Parse the response, get the status, and, depending on it, parse the response or return the reason. try { var obj = JObject.Parse(responce); if (obj.SelectToken("status") == null || ((string)obj.SelectToken("status")) == "error") { result.result = string.IsNullOrWhiteSpace((string)obj.SelectToken("message")) ? "UNKNOWN ERROR" : (string)obj.SelectToken("message"); return(result); // If failure, return the reason } result.result = (string)obj.SelectToken("status"); var message = obj.SelectToken("message"); result.total_task_count = (int)message.SelectToken("total_task_count"); var tasks = message.SelectToken("tasks"); // Parse tasks into objects result.tasks = new List <TaskData>(); foreach (var t in tasks) { result.tasks.Add(t.ToObject <TaskData>()); } } catch (JsonException) { result.result = "JSON Parsing error"; return(result); } return(result); }
public static TasksQueryResult GetTasks(int page = 1, string sortField = "", bool sortDesc = false) { string responce = string.Empty; string request = new string(baseUrl); //Проверку на наличие спец.символов я пропускаю, поскольку входные параметры заданы жестко в коде приложения. request += string.Format("?developer={0}", developerName); request += string.Format("&page={0}", page); if (!string.IsNullOrWhiteSpace(sortField)) { request += string.Format("&sort_field={0}", sortField); request += string.Format("&sort_direction={0}", (sortDesc ? "desc" : "asc")); } //Для запросов использую HttpWebRequest предоставляемый платформой. var req = WebRequest.CreateHttp(request); req.Method = "GET"; req.ContentType = "multipart/form-data"; TasksQueryResult result = new TasksQueryResult(); try { using (var resp = req.GetResponse() as HttpWebResponse) { if (resp == null || resp.StatusCode != HttpStatusCode.OK) { result.result = "Unable to request data"; return(result); } using (var rs = resp.GetResponseStream()) { using (StreamReader sr = new StreamReader(rs)) { responce = sr.ReadToEnd(); } } } } catch (WebException) { result.result = "API Request error"; return(result); } //Разбираем ответ, получаем статус, и в зависимости от него разбираем ответ либо возвращаем причину. try { //Тут я не стал делать десериализацию в объект, т.к для данного участка возможны различные варианиы структур var obj = JObject.Parse(responce); if (obj.SelectToken("status") == null || ((string)obj.SelectToken("status")) == "error") { result.result = string.IsNullOrWhiteSpace((string)obj.SelectToken("message")) ? "UNKNOWN ERROR" : (string)obj.SelectToken("message"); return(result); //Если неудача, то возвращаем причину } result.result = (string)obj.SelectToken("status"); var message = obj.SelectToken("message"); result.total_task_count = (int)message.SelectToken("total_task_count"); var tasks = message.SelectToken("tasks"); //Разбираем таски на объекты result.tasks = new List <TaskData>(); foreach (var t in tasks) { result.tasks.Add(t.ToObject <TaskData>()); } } catch (JsonException) { result.result = "JSON Parsing error"; return(result); } return(result); }