Você está na página 1de 18

Visual Studio comunnitt 2017

SQL Server 2017- mas usou 2012 mas disse ele que pode ser a 2017
ssms

new project
web
Aplicativo web ASP.NET Core

install net core sdk se ele nao aprecer

.net Core ASp.NET Core 2.0


web application MVC //vai criar toda estrutura facilita

//no exemplo ele nao coloca autenticacao diz ele q vai fazer depois

//exibe-gerenciador de solucoes

vai ter a launchsettings que vai definir as propriedades de inicializa�ao

//wwwrot � onde esta os arquivos estaticos

//appsettins arquivo de configura�oes

//bundleconfig tem a conf de empacotamento e mimifica�ao

//Program.cs � onde a a apliccacao � inicializada

//Startup.cs configura os servi�os middleware e onde vc configura quais servi�o


iram ser utilizados

MVC- � um padrao de arquitetura de software

Model � responsavel por manter os dados e logica de negocio da app


View � a interdace com que o usuario da app que exibe os dados
Controller recebe e trata as requisi�oes e renderiza a view apropriada com os dados

Implementa�ao ASP.NET Core MVC


Agrega diversos recursos que ajuda os desenvolvedores a manter as boas
pr�ticas e dar produtividade
-View Engine
-Model Binding
-Tag-Helpers
-Routing
-Scaffolding
-Configura��o sobre Conven��o

Entendo MVC
-URL n�o � igual a p�gina
-No modelo de desenvolvimento MVC uma URL corresponde a uma a�ao de um controller e
nao de uma
p�gina em disco
-No modelo de desenvolvimento MVC as requisi��es do navegador sao mapeadas para
a�oes do Controller
- o desenvolvimento � centrado na l�gica de aplicacao

N�s chamamos a Home/index mas de onde vem o rodap�?


vem de shared/_layout.cshtml que � compartilhada por todas as views
aonde tem arquivos de estilo, uso do (navbar)bootstrap que esta
em wwwroot/lib/bootstrap

dentro dela tem o @RenderBody(codigo razor que perimite renderizar codigo c#


juntamente a html)
aonde a view requisita ser� renderizada e embaixo dela
vem o rodap�

para editar arquivo de projeto vc sele o arquivo de projeto com botao direti e vai
em
edit ----.csproj aonde vai indicar as dependencias do seu projeto

-----------------------------------------------
Modelo de Dom�nio- Entity Framework Core

Criando o modelo de dom�nio

-Classes que representam a sua l�gica de neg�cio

-Vender Lanches

(Lanche.cs)
-Lanche
-Nome pre�o, descri�ao curta, descri�ao longa, imagem, imagem miniatura,--
categoria--
se � um ele preferido, se o lanche est� dispon�vel

(Categoria.cs)
-Categoria
-Nome e descri�ao

-----------------------------
Entity Framework Core 2.0
Ferramenta ORM: mapeia as classes para as tabelas

-Abordagem Code-First
-Gerar o banco de dados e tabelas a partir das classes

-Primeiro eu defino as classes do meu dom�nio e depois usando o EF Core


vou criar o banco de dados e as tabelas

-Vantagens
-Definir as propriedades e relacionamentos usando c�digo C#
-Abstrair comandos SQL e objetos ADO .NET
- Permitir gerenciar o versionamento do banco de dados:Migrations

obs:ele eclui um modelo que ja vem como paadrao que nao vamos utiizar
ErrorViewModel.cs
e � utilizada pelo controlado rHome temos que ir l� e excluir a interface Error()

na pasta Model botao direito Adicionar classe

digite prop tab tab para criar propriedade

se vc colocar Id no nome da propriedade o entity framework j� vai entende a


propriedade como uma chave prim�ria

OBS:quando nao se usa os importa vc pode clicar no botao direito


e remove and sort using para eliminalos
------------------------------------------------------------------
Entity Framework Core
� uma ferramenta ORM

O Entity Framework � uma ferramenta ORM (Objeto-relational mapping) que permite ao


desenvolvedor
trabalhar com dados relacionais na forma de objetos especificos de dom�nio
Ela elimina a necessidade da maior parte do c�digo de acesso a dados que os
desenvolvedores
normalmente precisam escreer

Objetos--><---Mapeador Objeto Relacional---><---Dados Relacionais

O Entity Framework Core


proporciona uma classe chamada DBContext que � o canal de comunica�ao com
o banco de dados representa a se�ao com o BD, preenche objeto com dados do BD,
monitorar as altera;coes feitas no Bd e persistir os dados no BD

O DBContext tem um ou mais DtSet que representam a tabela do BD

para consultar os Dbsets o EF usa o Linq(Language Integrated Query) faz consulta


diretamento no
BD e usa linguagem semelhate ao do SQL
o DBContent taduz o Linq->SQL

Podemos usar com o EF DataBase First ou CodeFirst

CodeFirst
-Aumento de Produtividade
-Controe sobre o versionamento do bd-Migration
-F�cil de testar e integrar

-------------------------------------------------
CONFIGURANDO O ENTITY FRAMEWORK CORE

Incluir referencias no proj via Nuget


-Microsoft.EntityFrameworkCore//pacote principal, base
tem a 2.2.6 mas foi usada a 2.0.1

-Microsoft.EntityFrameworkCore.SqlServer//referente ao BD sql sever q vamos


utilizar

_Microsoft.EntityFrameworkCore.Tools //para usar migrations e para o bd e tabelas,


e outras ferramentas

Esses pacotes instalados etaram referenciados em edit botao direito sobre .csproj

Definindo a classe de Contexto: AppDbContext

-Criar classe que herda de DbContext e que vai representar a sessao


com o banco de dados

-Definir nesta classe de contexto propriedade do tipo


DbSet<Entidade> Tabela

-O DbSet representa o mapeamento para as tabelas do bd

seleciona o projeto vai em projeto e nova Pasta e coloca o nome de Context e


add nela uma classe AppDBContext
e cria as tabelas referenciando a Entidade

em appsettings colocamos a string de conexao e sem a string nao tem como saber como
ele
vai conectar com o BD
"Data source" ->Nome do servidor
"Initial catalog"->Nome do BD

No arquivo appsettings.json definese a string de conexao com o banco de dados


com o nome do Baanco de Dados

A� se faz o registro da classe de contexto no arquivo Startup iformando qual ser�


o provedor e sua string de conexao
services.AddDbContext<AppDbContext>(options=>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))

tem que ir no Startup.cs e colocar o registro do context como servi�o


e nela diz quais entidades estao sendo mapeadas que foi definidados para as tabelas
ditas

----------------------------------------------------
DATA ANNOTATIONS

Usando DataAnnotations a valida�ao � aplicada no modelo do dom�nio atrav�s da


defini�ao de atributos e nao na interface do usu�rio.

Definimos os crit�rios de valida�ao em um lugar(Model), e isso produz os efeitos em


qualquer lugar que o modelo � usado

Como?

Quando oarametros Model sao usados nas Actions, ao popular o objeto do


modelo usando os dados da requisi�ao, o MVC verifica se o bjeto � valido com base
nos atributos Data Annotation definidos nas propriedades do modelo

----------------------------------------------------
USANDO EF CORE MIGRATIONS

Gerenciar o versionamento do banco de dados

add-migration nome_migra��o - cria Script


update database - Aplica o Script no SQL Server,vai gerar as tabelas

tools->nuget package Manager->console

add-migration MigracaoInicial
[nome da migration]

criou o AppDbContextModelSnapshot.cs para acompanhar egerenciar o versionamento


doBD

se vc nao falar ele vai vir com tamanho maximo portanto temos de restingir

se modificarmos com addannotations temos de dar o remove-migration


se nao der certo tente remove-migration -Force

e depois d� o update-database
o arquivo snapshot ele usa para acompanhar e gerenciar o versionamento do bd

Metodo UP - vai aplicar script e o me todo


DOWN vai desfazes o script
no MigrationInicial.cs

e na tabela colocou a chave ---id como IdentityColumn chave primaria do tipo


identity

-----------------------------------------------------
POPULANDO O BANCO DE DADOS COM MIGRATIONS

para voc� ver a estrutura de uma tabela bast ir no ssms com botao direito e
clicar em design

Para alimentar as tabelas tbm usamos os migrations


a� no caso fazemos o meso processo

add-migration nome_migracao -Cria Script dessa vez com metodos Up e down vazios
e vamos nele incluir um codigo sql para incluir e desfazer
update database -Aplica o Script

METODO UP()
migrationBuilder.Sql("INSERT INTO Categorias(CategoriaNome,Descricao)
VALUES('Lanche Normal','Lanche feito com ingredientes normais')");

METODO DOWN()
migrationBuilder.Sql("DELETE FROM Categorias");

a� demos add-migration PopularTabelas

coloca o codigo sql no up e down e se quiser modificar diretamente na tabela


pode tbm

---------------------------------------------------
APRESENTACAO O PADRAO REPOSITORY

Controlador recebe requisicao

a� funciona como apredemos

IIS->Controlador-->EF Core----->Banco de Dados


existe uma instancia do EF Core que pega os dados no banco de dados e retorna para
o controlador

funciona mas nao � adequado entao usamos o padrao REPOSITORY


para tirar esse forte acoplamento entre o ef core e o controlador

Vantagens
-Desacopla a sua aplica��o da l�gica de acesso a dados
-centraliza o seu c�digo para consultas e acesso a dados
- facilita os testes unit�rios
-minimiza a duplicac�o de codigo nas consultas

IMplementacao
Interface<----Classe Concreta
ILancheRepository<----LancheRepository
ICategoriaRepository<--CategoriaRepository

----------------------------------------------------------------
IMPLEMENTACAO O PADRAO REPOSITORY

-criamos pasta Repositories

clicamos em projeto-add novo Item e escolhemos interface com nome


ICategoriaRepository

e colocamos metodo que vai retornar uma cole�ao de categorias,apenas para


exibilos

IEnumerable<Categoria> Categorias {get;}


//vai retornar uma lista de categorias

quando vc define uma interface a sua aplicacao vc pode registrar iss como um
servi�o para fazer inje�ao
de dependencia no controlador, vamos presisar da instancia desses repositorios no
controlador
pois ao inves de referenciar o EF vamos referenciar o Repositorio, quem esta
referenciando o
Entity Framework � o reposit�rio

Na classe startup registramos o nosso servi�o

//trasiente pq o servi�o vai ser criado toda vez que for utilizado
services.AddTransient<ICategoriaRepository, CategoriaRepository>();
services.AddTransient<ILancheRepository, LancheRepository>();

agora podemos fazer a implementa�ao l� no controlador dos meus repositorios

SECAO 4
-----------------------------------------------------------------------------------
CRIANDO O CONTROLADOR E A VIEW PARA EXIBIR LANCHES

criou controlador na pasta controles


com o MVC Controller- Empty
LancheController

O meu Controlador vai ter que acessar o repositorio


entao vou definir um construtor e foi definir a inje�ao no consultor do meu
controlador
das duas interfaces do meu repositorio

OBS:ERROR AQUI ele disse que interfaces sao automaticamente publicas mas � mentira
tive de colocar publicas para resolver problema

O que fizemos no controlado s� � possivel pq adicionamos o servi�o das


interfaces no Startup

Agora vamos criar nossas a�oes fun�oes

o m�todo Action geralmente retorna uma result que pode ter um retorno de uma View
e pode ser de v�rios tipos

criou a IActionResult List


var lanches = _lancheRepository.Lanches;
return View(lanches)

a� criamos a view que lista os lanches mas tem outras op�oes


como Create Delete,details,edit,empty

vie name:List
template:List pq vai listar
Model Class pq vai mostrar info de Lanche
e falar que vamos usar pagina de Layout

com isso vai criar uma pasta Lanche dentro de View

ERROR SOLVED
Microsoft.AspNetCore.All to 2.08,
Microsoft.EntityFrameworkCore.Tools to 2.03 and
Microsoft.VisualStudio.Web.CodeGeneration.Design to 2.01

a� conseguir gerar a View


a� j� gerar a view com c�digo html para listar os lanches
que vai criar uma pasta Lanche dentro da Views com um
arquivo List.cshtml

dentro da View aonde tem @ � codigo Razor que foi feito para simplificar
e facilitar a codificacao das views

---------------------------------------------------------------------------
AJUSTANDO O CODIGO DA VIEW LIST

--------------------------------------------------------------------------
OS ARQUIVOS _VIEWSTART E _VIEWIMPORTS E O BOOTSTRAP

_Layout.cshtml
ela tem o o rodap� e a barra de navque ser� comum a todas views

dentro da Pasta Views temos a pasta_ViewStart que fala qual � o arquivo de Layout
e se comentarmos ela com // as paginas nao vao ter mais o arquivo de Layout
tirando a barra de nav e rodape, estilo do site.css e do bootstrap

o arquivo _ViewsImports.cshtml
contem todos imports e referentes comuns a todas as Views
e diz que a utilizacao das tags helpers esto habilitadas

+++Vc pode aplicar o BootSrap para poder deixar de um jeito bonito


e outra coisa � util para usar para cel e PC entao tem q estudar

-----------------------------------------------------------------
VIEWMODEL - CONCEITO

ViewModel
� um padrao que permite separar as responsabilidades entre os Models
de dom�nio e os Models que atendem as Views
Permite modelar entidades a partir de um ou mais Models em um
�nico objeto que serao representado em uma View

ViewModel
- cont�m toda l�gica de interface e a referencia ao model e assim atua como model
para a view
-separa as responsabilidades do Model usando informa��es que somente serao exibidas
ns
Views
-contem somente dados e comportamentos relacionados com a view
-cada viewmodel possui uma ViewTipada

+++++
Dica:Se existem informa�oes em seu Model que sao utilizadas somente pelas views
entao o seu
Model esta com a responsabilidade de tamb�m cuidar da camada de apresentacao

Crie um ViewModel com essas informacoes separando as responsabilidades

ViewModel - Benif�cios
1-Nao ter que alterar uma classe do Model para atender as necessidade de uma View
2-Agrupar informa�oes de uma ou mais Models em uma �nica classe, poupando
a necessidade de realizar muitas consultas
3-Um dado n�o contido no Model de dom�nio pode ser facilmente transportado via
ViewModel

---------------------------------------------------------------
IMPLEMENTANDO O PADRAO VIEWMODEL

qualquer modan�a que seja feita no model vai afetar a view

Criou nova Pasta no projeto chamada ViewModels


e colocou dentro dela uma view model chamada LancheListViewModel.cs
mas a� temos de ir em nosso controlador e trocar a referencia de modelo
para a ViewModel

//var lanches = _lancheRepository.Lanches;


//return View(lanches);

var lancheslistViewModel = new LancheListViewModel();


lancheslistViewModel.Lanches = _lancheRepository.Lanches;
lancheslistViewModel.CategoriaAtual = "Categoria Atual";
return View(lancheslistViewModel);

e depois trocar na pr�pria View

mas depois temos que ir na View e trocar


o modelo para nossa viewmodel
usando
Model.CategoriaAtual
Model.Lanches

-------------------------------------------------------------------
APRESENTANDO PARTIAL VIEWS

PartialViews
Uma partial view � uma view que � renderizada em outra view
Elas sao usadas para encapsular a logica reutilizada ns views
permitindo simplificar a complexidade das views
Elas podem ser usadas em multiplas views onde � necessario
uma l�gica similar evitando assim a duplicidade de c�digo

Possuem a extensao .cshtml


-sao iguais as Views
-sao renderizadas de forma diferente(nao executam _ViewStart.cshtml)

Uma partial view criada em uma pasta espec�fica das views de um controller e pode
ser usada
por todas views dessa pasta

Uma partial view criada na pasta Shared pode ser usada por todas as views da pasta
Views

@Html.Partial("NomeDaView") Retorna um IHtmlString

//esse � um razor por conta das chaves codifo C#


@{Html.RenderPartial("NomeView"); N�o retorna um resultado Transmite a sa�da
} renderizada diretamente para a resposta

Acessando dados nas PartialViews


Quando uma PartialView � instanciado ela obt�m uma c�pia do ViewData da view pai

@Html.Partial("NomeDaView",ViewData)

@Html.Partial("NomeDaView",model)

Podemos usar:Partial,RenderPartial,PartialAsync e RenderPartialAsync

???As atualiza�oes feitas nos dados da PartialViews n�o sao mantidas na view
principal.
???O ViewData alterado em uma PartialView � perdido quando ela retorna

Localizando Partial Views

@Html.Partial("NomeView") Usa a view atual na pasta com este nome, se nada


for encontrado, procura na pasta Shared

@Html.Partial("NomeView.cshtml") Uma view com este nome deve existir na mesma


pasta

@Html.Partial("~/Views/Forder/NomeView.cshtml")
@Html.Partial("/Views/Forder/NomeView.cshtml")

Localiza a partial view baseada na raiz da aplicacao


Caminhos que iniciam com "/" or "-/" referem-se a raiz da aplicacao

@Html.Partial("../Conta/LoginPartial.cshtml")
ocaliza a partial view usando caminhos relativos

-----------------------------------------------------------
IMPLEMENTACAO DA PARTIAL VIEW

ele criou uma partial view dentro de shared


botao direito na pasta shared creat view
_LanchesResumo e mar create cmomo
partial view

A� pegamos o c�digo de List.cshtml e passamos para partial view

a� voltamos na view e colocamos html helper


para renderizar a partial View
@Html.Partial("_LanchesResumo",lanche)

-----------------------------------------------
CARRINHO DE COMPRAS

-Criar a classe CarrinhoCompraItem.cs que representa um lanche que o usu�rio


seleciona
-Incluir a definicao da entidade no arquivo AppDbContext definindo uma
propriedade DbSet<> para expressar o mapeamento entre a entidade e a tabela
-Usar o Migrations para atualizar o equema do bd
-Add-migration CarrinhoItem
-Update-database

-No proxima aula veremos o conceito de Session que usaremos


no carrinho de compra e criamos a classe CarrinhoCompra.cs

criamos um model CarrinhoCompraItem


com suas propriedade fomos no appdbcontext e criamos uma nova tabela
e fizemos o migration
add-migration CarrinhoCompraItem

ERROR
The current CSharpHelper cannot scaffold literals of type
'Microsoft.EntityFrameworkCore.Metadata.Internal.DirectConstructorBinding'.
Configure your services to use one that can.
Coloquei o Tools 2.1.0

--------------------------------------------------------------------------------
SESSAO E O ESTADO DA APLICACAO

-HTTP-protocolo sem estado

-ASP.NET Core
-Session - Microsoft.AspNetCore.Session

-Com base em um dicion�rio ou tabela hash no servidor, o estado da


sessao persiste os dados atraves das requisi�oes de um navegador

-O ASP.NET Core mant�m o estado da sessao, dando ao cliente um cookie


que cont�m o ID da sessao que � enviado ao servidor com cada solicitacao

Oservidor mant�m uma sessao por tempo limitado ap�s a ultima requisi�ao

Voce pode definir o tempo limite da sessao ou usar o valor padrao que
� 20 minutos

O estado da sessao � ideal paraarmazenar dados do usuario especificos


de uma determinada sessao

Dados sao excluidos do cache:Sessao expira ou Session.Clear()

Configura�ao Sessao
Classe Startup deve conter
-Qualquer um dos caches de mem�ria IDistributedCache.
-Uma chamada a AddSession em ConfigureServices()
-A chamada UseSession em Configure()

public void ConfigureServices(IServiceCollection services)


{
//Adiciona uma implementacao padrao de IDistributedCache
services.AddDistributedMemoryCache();
services.AddSession();
}

public void Configure(IApplicationBuilder app,IHostingEnvironment env)


{
..
app.UseSession();
app.Run(async(context)=>
{
await context.Response.WriteAsync(msg.GetMensagem());
});
}

const string essionKeyNome="_Nome"


const string essionKeyNome="_Idade"

HttpContext.Session.SetString(SessionKeyNome,"Macoratti");
HttpContext.Session.SetInt32(SessionKeyIdade,23);

var nome = context.Session.GetString(SessionKeyNome);


var nome = context.Session.GetInt32(SessionKeyIdade);

---------------------------------------------------------------
Implementacao o Carrinho o Carrinho de Compras

Implementacao do Carrinho de Compras (usar conceito de Session)


-CarrinhoCompraItem.cs ->representa um lanche selecionado

-CarrinhoCompra.cs->representa uma colecao de lanches selecionadis


!!!-GetCarrinho-Obtem ou cria um carrinho de compra na sessao
-AdicionarAoCarrinho-Adicionar um lanche ao carrinho
-RemoverDoCarrinho-Remove um lanche do carro
-GetCarrinhoComprasItens-Retorna os itens do carrinho de compra
-LimparCarrinho-Remove todos os itens do carrinho
-GetCarrinhoCompraTotal-Calcula o total do carrinho

Naclasse Startup
1)m�todo ConfigureServices:
-Registrar a interface IHttpContextoAcessor
-Obter um carrinho de compra da Session:GetCarrinho()
-Configurar a Sessao

2) m�todo Configure
-Ativar o uso da Sessao:app.UseSession()

-------------
Adicionamos CarrinhoCompra.cs na pasta Models

nele ele coloca uma string como id ,que usa o struct GUid que �
um identificador unico global:um valor de 16 bytesque, se gerado
randomicamente, ir� geral um identificador quase �nico

ctor + tab+tab cria construtor

operador ? que vai retornar null se o <lkdlkas> esse operador for nulo

depois de fazer todas essas funcoes vamos no arquivo Startup.cs e add o servi�o

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

//um objeto vai ser criado e fornecido para todas as requisi�oes


//add sua interface e classe que implementa para ter acesso a sessao do
meu contexto
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//recebemos um objeto que representa o servi�o de carrinho para cada
requisi�ao
//mas o escoped diz que se duas pessoas pedir o mesmo obj ao mesmo
tempo vao obter instancias diferentes
//pq � criado 2 objetos para cada requisi�ao
services.AddScoped(cp => CarrinhoCompra.GetCarrinho(cp));

------------------------------------------------------------------
IMPLEMENTANDO O CONTROLLER DO CARRINHO DE COMPRAS

-Criar o controlador CarrinhoCompraCrontroller

Index()----->definir ViewModel CarrinhoCompraViewModel


AdicionarItemNoCarrinhoCompra()
RemoverItemDoCarrinhoCompra()

Criar a view Index.cshtml na pasta


//Criamos a viewmodel CarrinhoCompraViewModel

Control+tab mostra os arquivos abertos no visual studio

criamos o controlador CarrinhoCompraController e criamos as View corresponde a


essas a�oes

na da index ele nao sou nenhum template e usou a pagina de layout

---------------------------------------------------------------
Criando a p�gina inicial-Lanches Preferidos

IMplenta�ao do controle HomeController


-Aproveitar o controlador HomeController
Index()
Ajustar c�digo da view Index.cshtml na pasta
Criar a partial View _Carousel na pasta

Remove c�digo da index da Home COntroller

e criar a partial viewHomeViewModel

criou em Shared a partial View _Carousel


ele apaga as imagens banners em images para colocar as deles

--------------------------------------------------
Apresentando as ViewComponentes

View Components

Permitem criar funcionalidades semelhante a um m�todo Action de um controlador


independente de um controlador(Sao semelhantes as Partial Views)

Consistem em duas partes:


1A classe (derivada de ViewComponent)
2O resultado que ela retorna (uma View)

Criando uma View Component(VC)


1.Uma classe VC pode ser criada:
a)Derivando de ViewComponent
b)Decorando a classe com o atributo [View Component]
c)Criando uma classe onde o nome termina com o sufico ViewComponent

Uma classe VC deve ser p�blica, nao aninhada e nao abstrata


Aclasse deve expor o m�todo publico InvokeAsync
Nome=nome_da_ClasseViewComponent Ex:TesteViewComponent

Criando umaViewComponent(VC)
2.O resultado que ela retorna(uma View)

-A view retornada deve ser criada na pasta


-Views/Shared/Components/nome_vc

-Onde nome nome_vc � o nome do prefixo usado na VC criada

Exemplo:Uma View Component criada com o nome TesteViewComponent


Dever� ter a sua view criada na asta: /Views/Shared/Components/Teste
Se nao for definido um nome especifico para a view o nome padrao � Default.cshtml

Usando uma ViewComponent


1-A partir de um view
@Component.InvokeAsync("nome_vc",<tipo anonimo com parametros>)
A partir da ASP.NET Core 1.1 podemos invocar uma VC usando uma tag helper:

<vc:nome_vc parm="...."></vc:nome_vc>
Devemos usar a diretiva:@addTagHelper,nomeAssembly

Usando uma ViewComponent


2.A partir de um controlador

ReturnViewComponent("nome_vc",new{param=".."})

-Public IActionResultIndexVC()
{
-return ViewComponent("Lista",new{sequencia=".."});
}

---------------------------------------------------------
IMPLEMENTANDO UMA VIEWCOMPONENT

Implementa�ao da ViewComponent para exibir a quantidade de itens


do carrinho de compras na barra de navega�ao

Definindo a classe
-Criar uma pasta Components
-Criar a classe CarrinhoCompraResumo que deriva de ViewComponent
-Definir o c�digo do m�todo Invoke

Definindo a View
-Criar uma pasta Components na pasta Shared
-Criar pasta CarrinhoCompraResumo dentro da pasta Components
-Criar a view Default.cshtml

Vamos fazer isso tudo para usar nossa viewComponent na nossa view de layout para
exibir um icone do carrinho de compras
e a quantidade de itens que o carrinho possui

Essa Default.cshtml vamos usar na nossa View de Layout

-----------------------------------------------------------
APRESENTANDO AS TAGHELPERS

Tag Helpers
As taghelpers permitem que o c�digo do lado do servidor participe na criacao
e renderizacao de elementos HTML em arquivos Razor
Elas sao uma sintaxe alternativa aos Html Helpers e obt�m o mesmo resultado
final gerando o c�digo HTML.A sintaxe parece com HTML(elementos e atributos),
[mas � processado pelo Razor no servidor]

A diretiva @addTagHelper torna as TagHelpers disponiveis para uma view

Ao criar uma aplicacao ASP.NET Core o arquivo Views/_ViewImports.cshtml que


ser� herdado por todas as views da pasta /Views e subpastas.
ser� criado com o seguinte conte�do:
@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers

Para a cria��o de elementos de formul�rio temos um conjunto de tag helpers


descritos a seguir:

Input Tag Helper


TextArea Tag Helper
Validation Tag Helper
Label Tag Helper
Select Tag Helper

O recurso do intellisense tamb�m esta disponivel para as tagHelpers

------------------------------------------------------------------
Criando uma TagHelper

Cria�ao de uma TagHelper para enviar enviar email


-Criar pasta TagHelpers
-Criar classe EmailTagHelper que herda de TagHelper
-Sobrescrever o m�todo Process(context,output)

-Criar controlador ContatoCOntroller


-Criar view Index e usar a TagHelper
Criamos a EmailTagHelper e para a usarmos temos de configurar na
_ViewImports.cshtml
@addTagHelper LanchesMac.TagHelpers*,LanchesMac
para conseguir utilizar a tag helper que foi criada

cirou o ContatoController que estava faltando


criou a index desse controlador usndo a pagina de Layout

--------------------------------------------------------------------
ROTAS-DEFIINDO UMA NOVA ROTA DE APLICACAO

Exibir Lanches por categoria :normal e natural

-Redefinir a view List.cshtml


-Retornando os lanches por categoria

-Definir uma nova rota


-Incluindo a categoria

no m�todo Action vamos fazer o retorno por categoria e depois o roteamento


que � dentro de LancheControler;

OBS:
template:"{controller=Home}/{action=Index}/{id?}");
se chamarmos /Home/INdex/17 ou /Home/Index ou /Home ou /
todas vao chamar a acima pq � padrao

mas nos vamos precisar de criar uma nova rota


usamos o MapRoute-> � usado para adicionar/criar uma rota na cole��o de rotas

As rotas na colecao routes sao ordenadas e serao processadas na ordem


na qual foram adicionadas

MapRoute usa 3 parametros:name,url e default

name- � o nome da rota


url-� o padrao URL onde definimos a url e os parametros entre {}
default-� o mapeamento padrao

--------------------------------------------------------------
CRIANDO UM VIEW COMPONENT PARA EXIBIR NOVOS ITENS DE MENU

criando uma ViewComponent para exibir um menu por Categoria


-Criar classe CategoriaMenu na pasta Components
-Criar a View Default na pasta/Shared/Components/CategoriaMenu/
-Usar a ViewComponent no arquivo de _Layout

criamos a componentview CategoriaMenu e criamos a pasta


criamos uma pasta Categoria menu dentro da Shared
e criamos nela uma MVC VIEW pAGE
na nossa versao parace chamar RazorView e chamamos ela de Default

a� nos usamos nossa view em No arquivo de Layout

----------------------------------------------------
EXIBINDO DETALHES DE UM LANCHE
Incluir bot�o para selecionar lanche e link para exibir detalhes do lanche
1-Ajustar a PartialView _LancheResumo
2-Criar o m�todo Action Detail no controlodador LancheController
3-Criar a View Details.cshtml
usando a Layout n � parcial

--------------------------------------------------------------------------------
SECAO 5
EXPANDINDO O MODELO DE DOMINIO - PEDIDOS

Criar classe Pedido


Criar classe PedidoDetalhe
Expressar o relacionamento um-para-muitos entre Pedido e PedidoDetalhe

Definir o mapeamento na classe de contexto AppDbContext


DbSet<Pedido> e DbSet<PedidoDetalhe>

Atualizar o esquema o banco de dados usando Migrations:


Add-migration e update-database

a propriedade [BindNever] quer dzer que essa propriedade nao ser�


vinculada ao formul�rio
e o [ScaffoldColumn] diz que o campo nao ser� visivel na view

cria um monte de propriedade para Pedido e pedidoDetalhe que


foram criadas da o migration Pedidos e gera tabelas

-----------------------------------------------------------------
CRIANDO O REPOSITORIO PARA PEDIDOS

Criar a interface IPedidoRepository


Implementar a interface na classe PedidoRepository

Registrar o registro no m�todo ConfigureServices da classe Startup


services.AddTrasiente<IPedidoRepository,PedidoRepository>()

Cria na pasta interface interface


e a classe IPedidoRepository PedidoRepository
que sao feitas para podermos persistir os nossos pedidos
e registrando o servi�o no arquivo Startup

---------------------------------------------------------------------
Procurando Lanches-Search

Incluir na barra de navaga�ao a opcao para localizar lanches pelo nome

1-Criar formul�rio com input text no arquivo _Layout

2-Criar o m�todo Action Search no controlado LancheController

vamos colocar uma barrinha para pesquisar


que um form formulario
que vai acionar o controlle Lanche e a action Search e metodo get
pq queremos obter informacoes isso tudo dentro de Layout
eo searchString como nome para Localizar

a� entramos em nosso controllador Lanche


---------------------------------------------------------------------
CRIANDO O CONTROLADOR PEDIDOCONTROLLER

Definir o controllador PedidoController


1-Referenciar PedidoRepository e CarrinhoCompra
2Criar o m�todo Action Checkout(GET e POST)
3-Criar a View Checkout
4-Criar o m�todo Action CheckoutCompleto e a respectiva View
e cria a View checkout do controlador

quando clicar no botao vai para action checkout no post


aViewBag � usada para passar informa�oes de um controlador para uma view

----------------------------------------------------------------------
SECTION ^6:Autenticacao e Autoriza�ao -Identity

AUTORIZACAO E AUTORIZACAO

Autenticacao-Verificacao de uma identidade feita pela comparacao


das credenciais apresentadas com outras pr�-definidas(Quem �)

Autoriza�ao-Ocorre ap�s a autorizacao e permite atribuir e definir


prefil�gios ao sujeito autenticado(O que o usu�rio
pode fazer)

A autoriza�ao na Asp net core � feita usando o recurso Identity

ao iniciar o projeto podemos fazer isso automaticamente


basta ir em chano autorizario e colocar
Individual User Accout
a� � criado um Account Controller que vai gerenciar a conta do usuario
e o ManagerController
Vai ser cradis as views models ,sao varias
usadas nas pastas AccountViewModel
e ManagerViewModels
e tbm vai criar na pasta Data uma Migracao pois o Identity
requer a criacao da tabela para os usuarios

----------------------------------------------------
USANDO O IDENTITY

Identity
-Sistema de associacao que permite registrar usu�rio e criar
conta para login

Pacotes necess�rio:
Microsoft.AspNetCore.All
Microsoft.AspNetCore.Identity
Microsoft.AspNetCore.Identity.EntityFrameworkCore

para isso temos de alterar a classe de contexto para herdar de IdentityDbContext:


-Informar na classe de contexto o contexto do Identity e a classe
para gerenciar Usuarios:
public calss AppDbContext:IdentityDbContext<IdentityUser>
{publuic AppDbContext(DbContextOptions<AppDbContext> option:base(options))

public class AppDbContext : IdentityDbContext<IdentityUser>


Configuro os servi�os a adicionar ao middleware:
-M�todo ConfigureServices:

services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();

app.UseAuthentication();

agora vamos aplicar o migration

-------------------------------------------------
IMPLEMENTANDO O LOGIN

Criar controlador AccountController


-Referenciar:
-UserManager<IdentityUser>
-SignInManager<IdentityUser>

-Criar a ViewModel LoginViewModel


-Criar o m�todo Action Login(GET/POST)

usermanager tem os metodos para gerenciar os Usuarios


Na SignManager tem as ApIs para login e Logoff tem metodos para criar usuario
como para fazer Logoff

criamos
AccountController e LoginViewModel

------------------------------------------------------------
IMPLEMENTANDO O REGISTRO

Registro de Usu�rio

-Controlador AccountController

-Cria o m�todo Action Register(GET/POST)


-Usar o filtro ValidateAntiForgeryToken
-Criar m�todo Action Logout(HttPost)

----------------------------------------------------
CRIANDO AS VIEWS LOGIN E REGISTER

Criando as Views do controlador AccountController


1.Criar a View Login.cshtml
2.Criar a View Register.cshtml
3.Criar a View Logout.cshtml
4.Criar a partial view _LoginPartial.cshtml na pasta Shared
5.Ajustar o c�digo no arquivo _Layout.cshtml

[ERROR]--------
para deixar de ficar os campos vermelhor no SSMS ir em EDIT,intelissense,limpar
cache
Falahando ao registrar
instalei versoes 2.2.0 dos nuget enttity que pediu acima

Você também pode gostar