Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

So, I have been watching and learning .net core for few days now. I have built functioning API (with swagger) There is controller which I do use for now, which corresponds with my problem (Doubt there is problem with it, but to be complete):

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using BrambiShop.API.Data;
using BrambiShop.API.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace BrambiShop.API.Controllers
    [Route("api/[controller]")]
    [ApiController]
    public class CategoriesController : ControllerBase
        private BrambiContext _context;
        public CategoriesController(BrambiContext context)
            _context = context;
        // GET: api/ItemVariants
        [HttpGet]
        public async Task<IEnumerable<Category>> GetAsync()
            return await _context.Categories.ToListAsync();
        // GET: api/ItemVariants/5
        [HttpGet("{id}")]
        public async Task<Category> GetAsync(int id)
            return await _context.Categories.FindAsync(id);
        // POST-add: api/ItemVariants
        [HttpPost]
        public async Task<IActionResult> PostAsync([FromBody] Category item)
            if (!ModelState.IsValid)
                return BadRequest(ModelState);
            _context.Categories.Add(item);
            await _context.SaveChangesAsync();
            return Ok();
        // PUT-update: api/ItemVariants/5
        [HttpPut("{id}")]
        public async Task<IActionResult> PutAsync(int id, [FromBody] Category item)
            if (!_context.Categories.Any(x => x.Id == id))
                return NotFound();
            if (!ModelState.IsValid)
                return BadRequest(ModelState);
            _context.Categories.Update(item);
            await _context.SaveChangesAsync();
            return Ok();
        // DELETE: api/ItemVariants/5
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteAsync(int id)
            var itemToDelete = _context.Categories.Find(id);
            if (itemToDelete != null)
                _context.Categories.Remove(itemToDelete);
                await _context.SaveChangesAsync();
                return Ok();
            return NoContent();

Ok so, where is my problem. My problem lies in this method:

    public async void OnGet()
        Categories = await _Client.GetCategoriesAsync();

Which lies in my index.cshtml.cs.

The GetCategoriesAsync itself:

using BrambiShop.API.Models;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace BrambiShop.UI.Services
    public interface IApiClient
        Task<List<BrambiShop.API.Models.Category>> GetCategoriesAsync();
    public class ApiClient : IApiClient
        private readonly HttpClient _HttpClient;
        public ApiClient(HttpClient httpClient)
            _HttpClient = httpClient;
        public async Task<List<Category>> GetCategoriesAsync()
            var response = await _HttpClient.GetAsync("/api/Categories");
            return await response.Content.ReadAsJsonAsync<List<Category>>();

Thats is where I get the TaskCanceled exception. I have no clue, what is wrong here. It doesnt make any sense to me. Startup.cs defining HttpClient

            services.AddScoped(_ =>
            new HttpClient
                BaseAddress = new Uri(Configuration["serviceUrl"]),
                Timeout = TimeSpan.FromHours(1)
            services.AddScoped<IApiClient, ApiClient>();

And this is the ReadAsJsonAsync method

using Newtonsoft.Json;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
namespace BrambiShop.UI
    public static class HttpClientExtensions
        private static readonly JsonSerializer _jsonSerializer = new JsonSerializer();
        public static async Task<T> ReadAsJsonAsync<T>(this HttpContent httpContent)
            using (var stream = await httpContent.ReadAsStreamAsync())
                var jsonReader = new JsonTextReader(new StreamReader(stream));
                return _jsonSerializer.Deserialize<T>(jsonReader);
        public static Task<HttpResponseMessage> PostJsonAsync<T>(this HttpClient client, string url, T value)
            return SendJsonAsync<T>(client, HttpMethod.Post, url, value);
        public static Task<HttpResponseMessage> PutJsonAsync<T>(this HttpClient client, string url, T value)
            return SendJsonAsync<T>(client, HttpMethod.Put, url, value);
        public static Task<HttpResponseMessage> SendJsonAsync<T>(this HttpClient client, HttpMethod method, string url, T value)
            var stream = new MemoryStream();
            var jsonWriter = new JsonTextWriter(new StreamWriter(stream));
            _jsonSerializer.Serialize(jsonWriter, value);
            jsonWriter.Flush();
            stream.Position = 0;
            var request = new HttpRequestMessage(method, url)
                Content = new StreamContent(stream)
            request.Content.Headers.TryAddWithoutValidation("Content-Type", "application/json");
            return client.SendAsync(request);

It all just comes to this error:

Do anybody actualy know what is wrong and can maybe direct me the right way? I hope so, I have been unable to solve this for past 4 hours.

Sincerely thanks.

I should also mention that sometimes it loads, and when I do something like

Debug.WriteLine(Categories.Count);

It gives me the right count, so data are loaded

(also with writing out Names with foreach)

@RuardvanElburg Oh my god. That was it, jesus. Last 5 hours just about void - Task, thank you. Might you post it as answer, so I can mark it as solved? I couldnt find anything about it and it might really help someone out. Thanks a lot. – Tomáš Filip Feb 13, 2019 at 19:40

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.