I am having a problem with the async method that I implemented. The method basically makes the HttpRequest resource and deserializes the string if the request is successful. I wrote a test for a method and it works. But the method never returns when I call it from the controller?
public async Task<IEnumerable<T>> Get() { try { var resourceSegmentUri = new Uri(_uri, UriKind.Relative); var response = await _client.GetAsync(resourceSegmentUri); if (response.IsSuccessStatusCode) { var submission = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<IEnumerable<T>>(submission); } if (response.Content != null) { var message = response.Content.ReadAsStringAsync(); throw new WebException(message.Result, (WebExceptionStatus)response.StatusCode); } } catch (WebException e) { Logger.Error("GET Request failed with status: {0}", e.Status); throw; } throw new Exception(); }
Code that never returns:
public ActionResult Index() { var api = new Api(); var test = api.Get().Result;
Test that works:
[Test] public void GetShouldReturnIfSuccessfulRequest() { var api = new Api(); var submission = api.Get(); Console.WriteLine(JsonConvert.SerializeObject(submission)); Assert.NotNull(submission); }
Does anyone know a problem?
source share