No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creando componentes para conexión a la API

12/19
Recursos

Aportes 11

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Con esta web pueden auto generar las clases a partir de un objecto json.

https://quicktype.io/csharp

productService.cs

using System.Net.Http.Json;
using System.Text.Json;

namespace blazorappdemo;

public class ProductService{

    private readonly HttpClient client;
     private readonly JsonSerializerOptions option;

    public ProductService(HttpClient httpClient,JsonSerializerOptions optionsJson){
        client=httpClient;
        option=optionsJson;
      }  
    public async Task<List<Product>?> Get(){
        var response=await client.GetAsync("/v1/product");
        return await JsonSerializer.DeserializeAsync<List<Product>>(await response.Content.ReadAsStreamAsync());
        
    }

    public async Task Add(Product product){
        var response=await client.PostAsync("v1/products", JsonContent.Create(product));
        var content= await response.Content.ReadAsStringAsync();
        if (!response.IsSuccessStatusCode)
        {
            throw new ApplicationException(content);
        }
    }

    public async Task Delete(int productId){
        var response=await client.DeleteAsync($"v1/products/{productId}");
        var content= await response.Content.ReadAsStringAsync();
        if (!response.IsSuccessStatusCode)
        {
            throw new ApplicationException(content);
        } 
    }
    
}

category.cs

using System.Text.Json;

namespace blazorappdemo;

public class CategoryService{

    private readonly HttpClient client;
     private readonly JsonSerializerOptions option;

    public CategoryService(HttpClient httpClient){
        client=httpClient;
        option=new JsonSerializerOptions{PropertyNameCaseInsensitive =true};
      }  
    public async Task<List<Category>?> Get(){
        var response=await client.GetAsync("/v1/Categories");
        var content= await response.Content.ReadAsStringAsync();
        if (!response.IsSuccessStatusCode)
        {
            throw new ApplicationException(content);
        }
        return JsonSerializer.Deserialize<List<Category>>(content,option);
        
    }
    
}

Si por alguna razon a alguien le genera error el <List<Product>?>, es poor que falta el using que llama la carpeta Models, ejemplo:

using BlazorAppVisualStudio.Models;

Category.cs

namespace blazorappdemo;

public class Category{

    public int Id {get;set;}
    public string Name {get;set;}
    public string? image {get;set;}
    
}

public class Product{

public int Id {get;set;}
public string title {get;set;}
public decimal? price {get;set;}
public string Description {get;set;}
public int CategoryId {get;set;}
public string[] Images {get;set;}
public string? image {get;set;}

}

Yo utilizo 2 formas por que en ocasiones tienen errores: * <https://json2csharp.com/> * Visual Studio (Comunity, Professional, etc), Editar -> Pegado Especial -> Pegar JSON como Clases Lo único que necesitas es tener en el Json o Xml en el portapapeles (o seleccionar el texto y darle CTRL + C) No utilices librerías externas a partir de .net core ya vienen las librerías
En este video no se uso el "options" que fue injectado, que implicaciones tendria el no incluirlo? (Hice la prueba y funciona igual si borro la DI de jsonOptions)
`Ctr + .` Genera el constructor easy
en está página a partir del json te genera los modelos par csharp <https://json2csharp.com/>
Profe, Por que la linea 20 del file ProductService.cs tine que ser con await? No se supone que solo las peticiones a la API deben ser async?