Estou fazendo uma atividade com base no curso, eu tenho um arquivo json, e estou lendo esse json em uma classe, como chamo essa classe na statup pra usar no html?
Estou fazendo uma atividade com base no curso, eu tenho um arquivo json, e estou lendo esse json em uma classe, como chamo essa classe na statup pra usar no html?
Oi Natacha, tudo bem?
Esse arquivo json é para fazer a carga inicial de dados? Se for esse o caso, não recomendo fazer a chamada a partir da classe Startup
. Em vez disso, faça a chamada da sua classe a partir da classe Program
. No exemplo abaixo, a classe GerenciadorInicializacao
possui um método InserirDadosIniciais
para fazer a carga inicial dos dados a partir de um arquivo json:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Catalogo.API
{
internal class GerenciadorInicializacao
{
internal static async Task InserirDadosIniciais(IServiceProvider services)
{
using (var scope = services.GetService<IServiceScopeFactory>().CreateScope())
{
var context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
await GravarProdutos(context);
}
}
private static async Task GravarProdutos(ApplicationDbContext context)
{
var produtoDbSet = context.Set<Produto>();
var livros = await GetProdutosJson();
foreach (var livro in livros)
{
if (!produtoDbSet.Where(p => p.Codigo == livro.Codigo).Any())
{
await produtoDbSet.AddAsync(new Produto(livro.Codigo, livro.Nome, livro.Preco));
}
}
await context.SaveChangesAsync();
}
static async Task<List<Livro>> GetProdutosJson()
{
var json = await File.ReadAllTextAsync("livros.json");
return JsonConvert.DeserializeObject<List<Livro>>(json);
}
}
public class Livro
{
public string Codigo { get; set; }
public string Nome { get; set; }
public decimal Preco { get; set; }
}
}
Já na classe Program
, você pode chamar o método GerenciadorInicializacao.InserirDadosIniciais()
conforme abaixo:
public class Program
{
public static async Task Main(string[] args)
{
Console.Title = "Catalogo.API";
IWebHost host = BuildWebHost(args);
await GerenciadorInicializacao.InserirDadosIniciais(host.Services);
host.Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost
.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}