Вызов метода Execute Возвращает значение NULL при нормальном выполнении кода, но возвращает данные при переходе - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь вызвать API с помощью библиотеки RestSharp. Запуск кода обычно не приводит к извлечению данных, но когда я выполняю код во время отладки, метод Execute извлекает данные.

//execute the request
var response = client.Execute<JimiResponse<List<DeviceTrackListResponse>>>(webRequest);
private List<DeviceTrackListResponse> GetDeviceTrackListData(string accessToken, string imei, DateTime startDate, DateTime endDate)
{
    var client = new RestClient(_security.EndPoint);
    var webRequest = new RestRequest(Method.POST);

    var requiredParams = new DeviceTrackListRequest(accessToken)
    {
        app_key = _security.AppKey,
        imei = imei,
        method = "jimi.device.track.list",
        begin_time = startDate.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss"),
        end_time = endDate.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss")
    };

    webRequest.AddObject(requiredParams);

    try
    {
        var signature = Signature.SignTopRequest(requiredParams.GetProperties(), _security.SecurityToken, requiredParams.sign_method);
        webRequest.AddParameter("sign", signature);

        //execute the request
        var response = client.Execute<JimiResponse<List<DeviceTrackListResponse>>>(webRequest);

        var responseData = response?.Data?.Result;

        if (response.StatusCode == HttpStatusCode.OK && responseData != null)
        {
            return responseData;
        }
        else
        {
            return new List<DeviceTrackListResponse>();
        }
    }
    catch (Exception ex)
    {
        return new List<DeviceTrackListResponse>();
    }
}

1 Ответ

0 голосов
/ 13 мая 2019

Вы не запускаете этот код асинхронно, он не будет ждать ответа и продолжит работу после того, как достигнет этой строки.

 private async Task<List<DeviceTrackListResponse>> GetDeviceTrackListData(string accessToken, string imei, DateTime startDate, DateTime endDate)
{
    var client = new RestClient(_security.EndPoint);
    var webRequest = new RestRequest(Method.POST);

    var requiredParams = new DeviceTrackListRequest(accessToken)
    {
        app_key = _security.AppKey,
        imei = imei,
        method = "jimi.device.track.list",
        begin_time = startDate.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss"),
        end_time = endDate.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss")
    };

    webRequest.AddObject(requiredParams);

    try
    {
        var signature = Signature.SignTopRequest(requiredParams.GetProperties(), _security.SecurityToken, requiredParams.sign_method);
        webRequest.AddParameter("sign", signature);

        //execute the request
        var response = await client.Execute<JimiResponse<List<DeviceTrackListResponse>>>(webRequest);

        var responseData = response?.Data;

        if (response.StatusCode == HttpStatusCode.OK && responseData != null)
        {
            return responseData;
        }
        else
        {
            return new List<DeviceTrackListResponse>();
        }
    }
    catch (Exception ex)
    {
        return new List<DeviceTrackListResponse>();
    }
}
...