private Response <T> Execute <T>(string resource, bool isPost, Entities.Suggestions.SuggestQuery query) where T : class, new() { //todo учесть isBool var client = new System.Net.Http.HttpClient(); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("Authorization", "Token " + _token); var url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/" + resource; var fieldsDictionary = query.GetType().GetFields().ToDictionary(x => x.Name, x => x.GetValue(query)?.ToString()); var propertiesDictionary = query.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(query)?.ToString()); var pairsDictionary = fieldsDictionary.Union(propertiesDictionary).Where(x => !string.IsNullOrEmpty(x.Key) && !string.IsNullOrEmpty(x.Value)).ToList(); if (pairsDictionary.Count > 0) { url += "?" + string.Join("&", pairsDictionary.Select(x => $"{x.Key}={Uri.EscapeDataString(x.Value)}")); } var responseTask = client.GetAsync(url);//,, new System.Net.Http.StringContent(serialized, System.Text.Encoding.UTF8, "application/json")); responseTask.Wait(); var answerTask = responseTask.Result.Content.ReadAsStringAsync(); answerTask.Wait(); if (responseTask.Result.IsSuccessStatusCode) { var answerObject = JsonConvert.DeserializeObject <T>(answerTask.Result);//, _converter); return(new Response <T>(new ResponseBase() { IsSuccess = true, Code = (int)responseTask.Result.StatusCode, Detail = null }) { Data = answerObject }); } else { var answerObject = JsonConvert.DeserializeObject <SuggestResponseInternalError>(answerTask.Result);//, _converter); var message = answerObject.message; if (responseTask.Result.StatusCode == HttpStatusCode.Forbidden) { message = "Сервис подсказок недоступен. Проверьте раздел справки https://dadata.ru/api/suggest/#why-403-name"; } return(new Response <T>(new ResponseBase() { IsSuccess = false, Code = (int)responseTask.Result.StatusCode, Detail = message })); } }
public Response <Entities.Suggestions.SuggestEmailResponse> QueryEmail(string email) { var query = new Entities.Suggestions.SuggestQuery(email); return(Execute <Entities.Suggestions.SuggestEmailResponse>(EMAIL_RESOURCE, true, query)); }