Neste artigo será exibido em detalhes a estrutura do ASP.NET Core, o que significa cada um dos arquivos de configuração e suas features.

O que é?

O ASP.NET Core é um framework de desenvolvimento Web da Microsoft que combina a eficácia e organização da arquitetura MVC com as ideias do desenvolvimento ágile e as melhores partes do .NET Framework core.

Para saber mais sobre a história do ASP.NET Core, os motivos por trás da reescrita do Framework, veja este post: História do ASP.NET Core

A Configuração básica

Ao criar um novo projeto Empty do ASP.NET Core.

Novo-projeto
Empty-Project

É criado a seguinte estrutura básica

EstruturaBasica

Arquivo Descrição
Program.cs e startup.cs As classes Program e Startup são usados para configurar o comportamento da aplicação ASP.NET Core
EntendendoBasico.csproj O Arquivo EntendendoBasico contém os pacotes e referências do projeto. Aqui são indicados os pacotes NuGet. Na figura ele é quem representa o projeto.

O componente mais importante é o Startup.cs. É usado para criar serviços que fornecem funcionalidades comum ao app e também componentes de Middleware.

Componentes Middleware são utilizados para manipular as solicitações HTTP.

<nome-do-projeto>.csproj

O principal arquivo de configuração do projeto. A partir do .Net Core 2.0 ele substituiu o project.json.

Para acessar seu conteúdo pressione o botão direito em cima e selecione a opção Edit <nome-do-projeto>.csproj file

Principais elementos csproj

Elemento Descrição
Project Este é o elemento root. Por causa desta tag o MSBuild identifica que este é um arquivo de configuração. O conteúdo do atributo Sdk Microsoft.NET.Sdk.Web indica uma série de importações implícitas necessárias para compilar o projeto.
PropertyGroup Este elemento agrupa as propriedades das configurações do projeto.
TargetFramework Indica qual versão do framework necessária para compilar o projeto.
ItemGroup Agrupa configurações correlacionadas.
Folder Informa ao MSBuild como lidar com uma pasta no projeto.
PackageReference Usado para especificar uma dependência do NuGet. Os atributos Include e Version contém, respectivamente, o nome identificador e a versão do Pacote.
DotNetCliToolReference Utilizado para adicionar referências que provê comandos adicionais ao cli (Command Line). O Visual Studio irá baixar e configurar os pacotes. Também os usará para configurar o cli do dotnet.

Program.cs

É através da classe Program que o dotnet inicia a aplicação. Ela é o que chamamos de entry point. Por padrão o método Main é chamado. Através do Main que é configurado o ambiente. O conteúdo default da Program é suficiente para configurar a maioria dos projetos.

O método Main chama o método BuildWebHost, responsável pela configuração do ASP.NET Core. O BuildWebHost utiliza extension methods para configurar o app Web.

No ASP.NET Core 2, a configuração foi razoavelmente simplificada através do método CreateDefaultBuilder. Ele utiliza configurações que atendem a maioria dos projetos.

O método UseStartup é chamado para identificar a classe que fornecerá as configurações específicas do app. A convenção é usar uma classe chamada Startup. O método Build processa todas as configurações e cria um objeto que implementa a interface IWebHost. O método Main chama Run para iniciar.

Método CreateDefaultBuilder

Este é um extension method que encapsula uma série de configurações default e interessantes sobre o ASP.NET Core. Novamente, esse extension method contém configurações que resolve a grande maioria dos projetos.

Abaixo veja como ficaria a configuração substituindo seu conteúdo.

A seguir detalhes do que significa cada método.

Método Descrição
UseKestrel Configura o Kestrel Web Server
UseContentRoot Configura a pasta raiz para a aplicação. É a partir deste local que será carregado os arquivos de configuração, bem como os arquivos estáticos.
ConfigureAppConfiguration Utilizado para adicionar arquivos de configuração ao projeto.
AddUserSecrets Utilizado para guardar dados sensíveis
ConfigureLogging Este método configura o sistema de log
UseIISIntegration Indica a utilização do IIS e IIS Express
UseDefaultServiceProvider Configura o DI padrão do .NET Core
UseStartup Arquivo de configuração que será utilizado pelo WebApp

Kestrel

Kestrel é um servidor web Multi-plataforma. Projetado especialmente para executar apps ASP.NET Core. Ele é utilizado por default quando é usado o IIS ou IIS Express. É possível rodar o Kestrel diretamente através do comando

dotnet run

Isso significa que é desnecessário a dependência do IIS. Por isso o ASP.NET Core consegue ser multiplataforma. (LINDO)

O Kestrel pode ser hospedado no IIS, Nginx, Apache, Docker ou self-host.

Startup.cs

A classe Startup possui dois métodos, ConfigureServices e Configure. Estes métodos configuram o Web app e definem como eles devem ser usados.

Quando o aplicativo é iniciado, o ASP.NET Core cria uma nova instância da classe Startup e chama primeiramente o método ConfigureServices. Permitindo o aplicativo criar seus serviços. Depois que os serviços foram criados, o método Configure é chamado. O objetivo do método Configure é configurar o pipeline de solicitações do ASP.NET Core, nada mais que um conjunto de middleware para manipular solicitações HTTP.

ASP.NET Services é qualquer objeto que modifique o app fornecendo funcionalidades para outras partes da aplicação.

pipeline do ASP.NET Core

Ao usar o dotnet run ou iniciar a aplicação o seguinte pipeline ocorre

pipeline-aspnet

Fim!

Espero que tenham gostado e que te ajude a entender mais o ASP.NET Core!

Deixe seu comentário, críticas ou sugestões e vamos bater um papo!

Referências