Primeiras aulas do curso Asp.NET Core: Uma webapp usando o padrão MVC

Asp.NET Core: Uma webapp usando o padrão MVC

Transformando a aplicação em um servidor web - Visão Geral do Curso

Olá, tudo bem? Eu sou o Daniel Portugal, instrutor .NET aqui na Alura e em cursos presenciais na Caelum Rio. E também serei seu anfitrião aqui!

Mas para quem é esse esse curso?

Esse curso é para o desenvolvedor iniciante que já conheceu o C#, sua sintaxe e APIs e aprendeu o paradigma da Orientação a Objetos, mas agora quer botar a mão na massa criando uma aplicação para a web! Inclusive já fez os cursos de HTML e CSS, além do curso sobre o protocolo HTTP que são pré-requisitos para o desenvolvimento para a web.

Então pra facilitar sua vida o Visual Studio possui um padrão de projeto Web cheio de coisas prontas. Basta clicar em Arquivo, Novo Projeto e em seguida escolher ASP.NET Core Web Application. Existe também a opção de desenvolvimento Web para o .NET Framework, mas nós vamos focar na implementação .Net Core, ok? Depois que define um nome para o projeto e clica Ok, o Visual Studio cria um projeto com uma estrutura bem definida com pastas e classes.

Mas o que significa essa estrutura toda? Pra quê ela existe? Qual são seus objetivos? Será que são necessárias para o que eu quero desenvolver? Será que se eu remover alguma coisa aqui, a aplicação vai quebrar?

É pra responder a essas e outras perguntas parecidas que eu estou propondo que você faça esse curso. Porque eu te garanto que o curso vai promover uma base sólida para você saber do que cada pasta, classe e arquivo se trata quando pegar uma aplicação web com estrutura parecida com essa. Esses conhecimentos vão permitir que saiba o que pode tirar e o que pode colocar sem susto.

Uma das principais fundações para o desenvolvimento web é conhecer um padrão cuja sigla é MVC. Já ouviu falar? Nesse curso vou apresentar o problema que esse padrão soluciona. Mas vou fazer você sofrer na pele o problema antes de refletirmos sobre maneiras de resolver.

E como a gente vai evoluir o curso?

Vamos começar de onde você parou: uma aplicação local, do tipo console, e transformá-la em um servidor Web usando o AspNet Core. Nesse processo iremos juntar peça por peça dos componentes fundamentais para atender requisições web (roteamento, modelo requisição/resposta, request pipeline), e resolvendo problemas à medida que vão aparecendo, até que vamos chegar a famosa arquitetura web MVC.

Mas atenção! O objetivo desse curso é estudar alguns conceitos relacionados ao desenvolvimento Web. Esse curso não vai aprofundar o ASP.NET Core, muito menos o framework MVC. Se você está procurando por cursos que aprofundem o ASP.NET Core MVC, dê uma olhada nesse curso que tem várias partes:

Se você ficou curioso para entender os conceitos do ASP.NET Core e do MVC, me acompanha assistindo o próximo vídeo!

Transformando a aplicação em um servidor web - Ambiente e aplicação inicial

Nesse vídeo eu vou mostrar os pré-requisitos pra você acompanhar o curso sem estresse, além de informar quais ferramentas vamos precisar para implementar o código, e no finalzinho vou também explicar por alto qual é a aplicação que vamos trabalhar.

Vamos lá?

Pré-requisitos e ferramentas

Para entender o curso você vai precisar conhecer Orientação a Objetos com C#, o protocolo HTTP e um pouco de HTML. Por isso coloquei como pré-requisitos cursos da Alura com esses 3 assuntos.

Veja o link para os cursos aqui:

Já para escrever código C#, vamos utilizar a IDE Visual Studio 2017 Community Edition. Se você ainda não tem esse software, visita aqui essa página

https://www.visualstudio.com/pt-br/downloads/

O arquivo zipado com o projeto inicial está aqui. Você vai baixar o zip e descompactar em alguma pasta de sua preferência. Eu aqui estou extraindo na pasta padrão do VS Projects, que fica embaixo de Documentos. Agora você vai abrir a solução no VS. Abriu aí? Então vamos pro próximo passo.

Se você tentar compilar o projeto aí na sua máquina e receber uma mensagem dizendo que não possui o .NET Core 2.0 instalado, faça o seguinte. Clique com o botão direito do lado do projeto Alura.ListaLeitura.App e escolha Propriedades. Na aba Aplicativo observe o campo Estrutura de Destino (se o seu VS estiver em inglês será Target Framework). Como sua máquina mostrou a mensagem de ausência do .NET Core 2.0, esse campo vai estar vazio. Então para baixar e instalá-lo, clique na lista e selecione Instalar outras estruturas… Quando você fizer isso, será direcionado para a seguinte página no site da Microsoft:

https://www.microsoft.com/net/download/visual-studio-sdks

Aqui você deve clicar no link do SDK do .NET Core 2.x. Ele vai baixar o instalador no .NET Core 2.x e daí basta executá-lo para ter o framework pronto pra você utilizar no nosso projeto. Beleza?

Aplicação Inicial

Nossa aplicação tem duas classes de negócio que encapsulam os conceitos de um livro e de uma lista de leitura.

Nesse curso vamos trabalhar apenas com 3 listas: uma para guardar os livros que queremos ler (futuro), outra para registrar os livros que estamos lendo (presente), e outra para armazenar os livros que já lemos (passado).

Além disso, tem também algumas classes que representam a origem desses livros, que estou aqui chamando de repositório. Repare que temos uma interface ILivroRepositorio, com a abstração para um repositório de livros, com propriedades para as três listas de que falamos. E existem também duas classes que implementam essa interface, uma montando as listas em memória, e outra montando as listas a partir de um arquivo CSV. Tudo muito simples e básico. Não me preocupei em refatorar essas classes. Você provavelmente saberá projetá-las e implementar muito melhor que eu.

A classe que contém o fluxo da execução do programa imprime as três em sequência. Vejam. Primeiro a lista Para Ler, em seguida Lendo e finalmente a Lidos.

E se eu quisesse disponibilizar essa listagem no navegador? O que precisaria ser feito em minha aplicação? O que mudaria?

Transformando a aplicação em um servidor web - Nossa aplicação na Web

O que significa expôr essa lista no navegador? Significa que, ao invés de ler as informações no terminal, iria acessá-las pelo navegador. Então eu vou abrir um navegador. As informações já estão aqui? Não né. O que eu preciso fazer? Colocar o endereço de onde espero encontrar essas informações. Por exemplo se eu quisesse conhecer quais os cursos disponíveis na Alura, eu escreveria o endereço alura.com.br aqui na barra, certo?

Percebam que o navegador está utilizando o modelo HTTP. Nesse modelo, toda comunicação começa com um pedido, e quem fez o pedido fica esperando uma resposta. Só que pro navegador não interessa saber quem vai responder a ele. A única coisa que ele precisa saber é o endereço do pedido. Na especificação HTTP, esse endereço é chamado de URI.

Então para mostrar a lista de leitura basta eu saber qual o endereço que devo colocar no navegador. Mas peraí, eu ainda não mudei minha aplicação para exibir a lista no navegador. Minha aplicação ainda exibe as informações no terminal. Relembrando a especificação HTTP, a parte que responde uma requisição é chamada de servidor. E a parte que faz o pedido é chamada de cliente.

Para transformar minha aplicação atual em um servidor HTTP usando o AspNet.Core, vou ter que criar um objeto que vai hospedar todos os pedidos da aplicação. Vou criar uma variável para esse objeto e vou chamá-la de host. E a gente sabe que todo objeto no C# é de algum tipo. Qual é o tipo de um objeto que hospeda chamadas web? WebHost! Só que vamos usar sua interface. Então o tipo que queremos é IWebHost.

Perceba que o compilador não reconhece esse tipo, e mesmo o VS não consegue achar o namespace para esse tipo. Veja que todas as suas sugestões são para criar uma classe chamada IWebHost. Isso acontece porque nosso projeto não tem o pacote com a referência para esse tipo. E que pacote é esse? Ganhou um doce quem respondeu AspNet Core. Vamos instalá-lo usando o Nuget. Então vou abrir o console do gerenciador de pacotes clicando em Ferramentas, Gerenciador de Pacotes, Console do …, e vou colocar o comando que copiei da área de transferência. O comando é esse aqui:

Install-Package Microsoft.AspNetCore -Version 2.0.1

Pressiono Enter e o VS vai começar a instalar o pacote no projeto. Lembre-se que você precisa estar conectado na internet para instalar. Pronto! Agora podemos usar o Quick Fix para usar o namespace referente ao tipo IWebHost, que é o ... A construção de um host web é bastante complexa porque podemos definir uma série de opções (para esse host). Uma das opções será o servidor web adotado pela sua aplicação, que no caso será o Kestrel, que é um servidor web já implementado pela galera do AspNet.Core.

Quando a construção de um objeto é complexo, isolamos essa complexidade em uma classe, seguindo um padrão famoso chamado Builder. Então usaremos um objeto da classe WebHostBuilder para criar esse objeto IWebHost pra gente. Então fazemos new WebHostBuilder. Em seguida podemos construir o host usando o método Build(). Se você quiser economizar linhas de código pode fazer diretamente assim (mostrando o uso desnecessário da váriavel builder). Por fim, subimos o servidor usando o método Run().

Mas se fosse só isso a gente não precisaria de um builder não é? A documentação sobre essa parte de hosting é bastante completa (mostrar neste momento), com todas as possibilidades de configuração do seu servidor de host. Pra gente rodar nossa aplicação na web agora, o mínimo que precisaremos configurar é 1) dizer qual a implementação do servidor web utilizado (novamente, Kestrel), e 2) o que o servidor vai fazer quando chegarem as requisições. Ou seja, como responder as requisições que chegarem nele.

Vamos lá.

Para dizer que usaremos o Kestrel, chamamos um método de extensão UseKestrel(). Quando executarmos o programa, o Kestrel já estará quase pronto para atender pedidos HTTP. Mas ainda vai dar erro. Vamos analisar com calma. Repare na pilha de erros o método que está sendo chamado.

O que está acontecendo é que o AspNet.Core chama um estágio de inicialização do servidor. No inglês, Startup. E por enquanto não fizemos qualquer implementação. A implementação disso é através de uma classe. Essa classe não precisa herdar de ninguém ou mesmo implementar qualquer interface. Basta que informemos qual é a classe durante a construção do objeto-host usando o método de extensão UseStartup<>(), passando por generics a classe a ser utilizada. Por convenção, o nome da classe é Startup, mas você pode escolher o nome que achar melhor.

Se eu rodar a aplicação agora vou tomar outro tipo de erro. Veja. Está dizendo que a classe Startup deve ter um método ConfigureProduction() ou Configure(). Então vamos criar ué.

Pronto, se eu rodar a aplicação agora não vou receber mais erro. Legal! E olha só o que está escrito. Está dizendo que está escutando requisições no endereço http://localhost:5000. Vamos (no navegador) conferir! Ops, quando eu coloco esse endereço… nada. Porquê?

Sobre o curso Asp.NET Core: Uma webapp usando o padrão MVC

O curso Asp.NET Core: Uma webapp usando o padrão MVC possui 236 minutos de vídeos, em um total de 72 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

  • 1270 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1270 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1270 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1270 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas