ASP.net Core APP 01 – Ambiente
Antes de iniciar o desenvolvimento precisamos compreender nosso ambiente e verificar quais versões do SDK e do Runtime do dotnet estão disponíveis. Primeiro vamos ver a versão atual.
dotnet --version
Agora vamos listar os SDKs.
dotnet --list-sdks
Agora vamos listar os runtimes.
dotnet --list-runtimes
Por fim vamos criar um arquivo chamado global.json para definir a versão do SDK e da runtime que vamos utilizar.
dotnet new globaljson --sdk-version 2.2.203 --force
O primeiro passo realizado neste projeto foi a criação do esqueleto da aplicação utilizado a linha de comando, e executando:
dotnet new mvc -o myshop

Em seguida realize o download do arquivo ui-ecommerce.zip através deste link https://1drv.ms/u/s!Amsz66OT5hTfi59IuCY06YO6qAdC3A?e=U750ba e descompacte dentro do seu desktop.
Mova os arquivos conforme a seguinte tabela:
Origem: ui-ecommerce.zip | Destino: Projeto myshop |
\ui-ecommerce\css\* | \myshop\wwwroot\css |
\ui-ecommerce\js\* | \myshop\wwwroot\js |
\ui-ecommerce\images\* | \myshop\wwwroot\images |
\ui-ecommerce\starter-page-listing.html | \myshop\Views\Home\Index.cshtml |
Caso voce execute a aplicação teclando F5 no Visual Studio Code ou rodando o comando dentro da pasta do projeto na linha de comando:
dotnet run
Deverá ter o seguinte resultado ao acessar https://localhost:5001

Acesso ao banco de dados Mongo
Para ter acesso ao banco de dados mongo, precisamos primeiro instalar a biblioteca para .net Core, para isso vá novamente ao terminal dentro da pasta do projeto e execute o comando:
dotnet add package MongoDB.Driver --version 2.9.1
Você também precisa instalar o MongoDB, para isso siga o manual: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/
Agora vamos criar uma classe dentro do namespace Models para representar os dados do Produto que será mostrado na tela principal. Para isso crie a classe Product, e insira o código abaixo. Observe que vamos anotar a propriedade Id com as anotações BsonId e BsonRepresentation para informar ao Mongo que este atributo é a chave única da coleção.
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace myshop.Models
{
public class Product
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public float Price { get; set; }
}
}
Agora vamos criar um conjunto de classes de Serviço onde vamos no primeiro momento conectar diretamente com o banco de dados Mongo e realizar uma consulta e destinar os dados recebidos para a tela. Para isso crie dentro do projeto um novo diretório chamado Services.

Dentro deste diretório crie uma interface IProductService.cs com o seguinte código inicial:
using System.Collections.Generic;
using myshop.Models;
namespace myshop.Services
{
public interface IProductService
{
List <Product> GetAll();
}
}
Em seguida dentro da mesma pasta crie uma classe ProductService conforme o código a seguir:
using System.Collections.Generic;
using MongoDB.Driver;
using myshop.Models;
namespace myshop.Services
{
public class ProductService : IProductService
{
MongoClient con;
IMongoDatabase db;
public ProductService()
{
con = new MongoClient("mongodb://127.0.0.1:27017");
db = con.GetDatabase("NomeDB");
if(db.GetCollection<Product>("Products") == null)
db.CreateCollection("Products");
}
public List<Product> GetAll()
{
var collection = db.GetCollection<Product>("Products");
return collection.Find<Product>(p => true).ToList();
}
}
}
Observe que na linha con = new MongoClient(“mongodb://127.0.0.1:27017”); você deve informar o IP do seu servidor MongoDB ou manter 127.0.0.1 caso o servidor esteja instalado no seu próprio computador. Na linha db = con.GetDatabase(“NomeDB”); informe o nome do seu banco de dados. Dentro do método GetAll() estamos executando o método Find para retornar todos os objetos encontrados na coleção.
Agora para que este serviço seja injetado por dependência dentro da nossa classe controller, devemos alterar o código da classe Startup.cs para no método ConfigureServices inserir a linha para injeção desta dependência.

//No topo da classe:
using myshop.Services;
//No método ConfigureServices
services.AddScoped<IProductService,ProductService>();
Então podemos finalmente alterar o código da nossa classe HomeController para no método construtor receber a instância do ProductService e na action Index() executar a consulta e repassar o resultado para a View.

using myshop.Models;
using myshop.Services;
namespace myshop.Controllers
{
public class HomeController : Controller
{
private IProductService productService;
public HomeController(IProductService productService)
{
this.productService = productService;
}
public IActionResult Index()
{
var listProducts = productService.GetAll();
return View(listProducts);
}
Agora devemos alterar nossa view para que os dados enviados pelo controller sejam exibidos. Para isso identifique dentro do template \Views\Home\index.cshtml um tag article com a class card-product
<article class="card card-product">

Observe que todo o conteúdo desta tag article contém todo o layout da listagem para mostrar um produto. Após esse primeiro tag, deve existir um grupo de tags article com a classe card-product, remova esse segundo grupo mantendo apenas o primeiro.
Agora no início do arquivo Index.cshtml vamos inserir o comando @model do Razor para indicar que esta página utilizará uma lista de Product como sua classe de fonte de dados:
@model IList<myshop.Models.Product>

Então antes do início do tag article vamos inserir um @foreach para repetir o código do bloco para cada produto que foi enviado na lista pelo controllador. E na tag h4 vamos inserir o título do produto utilizando a tag @item.Name

Para concluir, devemos fechar o foreach com uma chaves logo após o fim do tag article.

Para testar nossa aplicação precisamos acessar o banco de dados e criar alguns registros, para isso instale o programa Robo 3T https://robomongo.org/ e realize a conexão com seu servidor MongoDB.
Procure o seu banco de dados e dentro dele a coleção Products. Clique com o botão direito sobre a coleção Product, e selecione a opção Insert Document.

Insira um novo documento conforme o código de exemplo a seguir.

{
"Name" : "Batedeira Arno",
"Description" : "Batedeira Arno modelo 2000",
"Price" : 120
}
Para confirmar se o documento foi inserido clique duas vezes sobre a coleção Product e verifique se o documento é apresentado na listagem da direita.

Agora execute a aplicação no Visual Studio Code e verifique se o produto é apresentado.
