Асинхронные проблемы WebRequest - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь создать несколько регрессионных тестов, которые делают асинхронные вызовы нашего API.Я получаю ошибку нулевой ссылки постоянно, независимо от того, что я пытаюсь.Я пробовал несколько разных способов вызова запроса безрезультатно.Я в конце своего остроумия.Я могу поставить точку останова в коде, чтобы проверить URL и запустить этот URL в Postman, и он возвращает данные, как и ожидалось.Я передаю несколько заголовков, но ничего необычного.

Ниже приведена трассировка стека и мой код.Кто-нибудь может увидеть, что мне не хватает?

Спасибо

<GetApiResponse>d__17`1.MoveNext() in C:\Users\foo\Documents\test.api\Common\Base.cs:line 199 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Test.API.ResultsTest.<ResultsAPI_SortByLowToHigh>d__1.MoveNext() in C:\Users\voo\Documents\test.api\ResultsTest.cs:line 74 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() Result Message: Test method Test.API.ResultsAPI_SortByLowToHigh threw exception: System.NullReferenceException: Object reference not set to an instance of an object.

try
{
    var webRequest = WebRequest.Create(url);
    webRequest.Method = "GET";
    webRequest.ContentType = "application/json";
    webRequest.Headers.Add("ApiVersion", "1");
    webRequest.Headers.Add("Country-Code", "US");
    webRequest.Headers.Add("Currency-Code", "USD");

    Task<WebResponse> responseTask = webRequest.GetResponseAsync();

    using (var webResponse = await responseTask)
    {
        using (var sres = webResponse.GetResponseStream())
        {
            var ms = new MemoryStream();
            if (sres != null) await sres.CopyToAsync((ms));
            ms.Position = 0;
            using (var sr = new StreamReader(ms))
            {
                JsonResponse = sr.ReadToEnd();
            }
        }
    }

    if (!string.IsNullOrEmpty(JsonResponse))
    {
        response = JsonConvert.DeserializeObject<ServiceResponse>(JsonResponse);
    }
    else
    {
        throw new Exception(typeof(ServiceResponse).Name + " API returned null Response");
    }
    return response;
}
catch (WebException e)
{
    ErrorMsg.AppendLine(e.Message);
    throw;
}
...