Данные, которые я получил из API sigfox с помощью почтальона, отличаются от данных, которые я получил при использовании программы C# с использованием HTTP-клиента.
API содержит такие параметры запроса, как:
[*]limit=(число) — число, ограничивающее количество сообщений, которые я могу получить (не влияет на проблему)
и
[*]before = (unix-время) [*]since= (время unix) это параметры времени.
В почтальоне полученные мной данные соответствуют параметру времени, что означает, что данные получены до установленного времени и после установленного времени.
Ссылка на API (с поддельной информацией): https://backend.sigfox.com/api/devicety ... 1568185800
Это относится к разделу загрузки данных:
публичный статический класс DownloadData { частная статическая строка UrlParameters="?limit=100&before=&since="; public static void GetfromAPI (строка deviceId, задолго до времени, задолго до времени) { вар apiResponse = новые Models.Datas(); вар baseUrl = ConfigurationManager.AppSettings["ApiBaseUrl"]; var username = ConfigurationManager.AppSettings["ApiUserName"]; var пароль = ConfigurationManager.AppSettings["ApiPassword"]; var mediatype = ConfigurationManager.AppSettings["MediaType"]; вар FinalUrl = string.Format(baseUrl, deviceId, beforeTime, посколькуTime); используя (var client = новый ApiClient(finalUrl, имя пользователя, пароль, медиатип)) { //apiResponse = client.GetAsyncMessage(UrlParameters).Result; apiResponse = client.GetAsyncMessage(UrlParameters).Result; InsertToDatabase(FormatData(apiResponse.Data)); //apiresponse.data содержит данные } } http-клиент
публичный класс ApiClient: IDisposable { частный HttpClient _httpClient; частная строка только для чтения _baseurl; частная строка только для чтения _username; частная строка только для чтения _password; частная строка только для чтения _mediatype; public ApiClient (строка baseurl, строковое имя пользователя, строковый пароль, строковый медиатип) { _baseurl = базовый URL; _username = имя пользователя; _пароль = пароль; _mediatype = медиатип; } public async Task GetAsyncMessage(строковый URL), где TResult: класс, new() { вар strResponse = ждут GetAsyncMessage (url); return JsonConvert.DeserializeObject(strResponse, new JsonSerializerSettings ///str отвечает, содержащая строку { ContractResolver = новый CamelCasePropertyNamesContractResolver() }); } частная асинхронная задача GetAsyncMessage (URL-адрес строки) { ПроверитьHttpClientConnection(); используя (var ответ = ожидание _httpClient.GetAsync(url)) { ответ.EnsureSuccessStatusCode(); возвращение ожидания ответа.Content.ReadAsStringAsync(); } } httpclientс базовой аутентификацией
private void CreateHttpClient() { _httpClient = новый HttpClient {BaseAddress = новый Uri (_baseurl)}; byte[] cred = UTF8Encoding.UTF8.GetBytes(_username + ":" + _password); _httpClient.DefaultRequestHeaders.Authorization = новый System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(cred)); _httpClient.DefaultRequestHeaders.Accept.Add( новый System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(_mediatype)); } ФУНКЦИЯ в другом файле, который запускает верхний код
DownloadData.GetfromAPI("devicetypesid filler",Common.BCurrenttimetoUnix(), Common.SCurrenttimetoUnix()); common.bcurrentimetounix и т. д. принимает значение из функции в качестве параметров запроса до и после. Итак, данные, которые я получил в почтальоне, следуют за параметром запроса. это означает, что данные, которые я получил, относятся к периоду до и после.
пример:
до 16:50, поскольку для параметров установлено время 16:40.
Извлеченные данные: 1-е данные = 16:49, 100-е данные = 16:41.
Однако в моей программе на C# он даже не следует за параметром. полученные данные превышают время как до, так и после.
РЕДАКТИРОВАНИЕ №1. Изображения

РЕДАКТИРОВАНИЕ №2
БАЗЕВРЛ:
Изменить № 3
Работа с этим как с baseurl: Отладочные скриншоты:

Изменить № 4
Этот код работает.
public static void GetfromAPI (строка deviceId, задолго до времени, задолго до времени) { вар apiResponse = новые Models.Datas(); вар baseUrl = ConfigurationManager.AppSettings["ApiBaseUrl"]; var username = ConfigurationManager.AppSettings["ApiUserName"]; var пароль = ConfigurationManager.AppSettings["ApiPassword"]; var mediatype = ConfigurationManager.AppSettings["MediaType"]; var urlparam = ConfigurationManager.AppSettings["ApiParam"]; вар Finalurl = string.Format(baseUrl, deviceId); var urlParam = $"?limit=100&before={beforeTime}&since={sinceTime}"; используя (var client = новый ApiClient(finalurl, имя пользователя, пароль, медиатип)) { //apiResponse = client.GetAsyncMessage(UrlParameters).Result; apiResponse = client.GetAsyncMessage(urlParam).Result; InsertToDatabase(FormatData(apiResponse.Data)); //apiresponse.data содержит данные }
Мобильная версия