QPANC - Parte 1 - ASP.NET - Inicializando os Projetos
Tags: quasar, postgres, aspnetcore, docker
Published: 2020-04-19 23:35:24

> **QPANC** são as iniciais de **Q**uasar **P**ostgreSQL **A**SP **N**ET **C**ore.

  * [Source](https://github.com/TobyMosque/qpanc)
  * [Introdução](https://dev.to/quasar-pt-br/arquiteturando-uma-aplicacao-com-quasar-postgresql-asp-net-core-e-docker-introducao-o7o)
  * [Parte I - ASP.NET - Inicializando os Projetos](https://dev.to/quasar-pt-br/qpanc-parte-1-asp-net-inicializando-os-projetos-lkm)
  * [Parte 2 - PostgreSQL](https://dev.to/quasar-pt-br/qpanc-parte-2-postgresql-51pb)
  * [Parte 3 - ASP.NET - Registrando Serviços e Lendo Variáveis de Ambiente](https://dev.to/quasar-pt-br/qpanc-parte-3-asp-net-registrando-servicos-e-lendo-variaveis-de-ambiente-3do2)
  * [Parte 4 - ASP.NET - Entity Framework e ASP.NET Core Identity](https://dev.to/quasar-pt-br/qpanc-parte-4-asp-net-entity-framework-e-asp-net-core-identity-40f9)
  * [Parte 5 - ASP.NET - Documentação Interativa com Swagger](https://dev.to/quasar-pt-br/qpanc-parte-5-asp-net-documentacao-interativa-com-swagger-4n0o)
  * [Parte 6 - ASP.NET - Regionalização](https://dev.to/quasar-pt-br/qpanc-parte-6-asp-net-regionalizacao-13p5)
  * [Parte 7 - ASP.NET - Autenticação e Autorização](https://dev.to/quasar-pt-br/qpanc-parte-7-asp-net-autenticacao-e-autorizacao-bpd)
  * [Parte 8 - ASP.NET - CORS](https://dev.to/quasar-pt-br/qpanc-parte-8-asp-net-cors-52dn)
  * [Parte 9 - Quasar - Criação e Configuração do Projeto](https://dev.to/quasar-pt-br/qpanc-parte-9-quasar-criacao-e-configuracao-do-projeto-5hbi)
  * [Parte 10 - Quasar - Configurações e Customizações](https://dev.to/quasar-pt-br/qpanc-parte-10-quasar-configuracoes-e-customizacoes-2i86)
  * [Parte 11 - Quasar - Componentes - Diferença entre SPA e SSR](https://dev.to/quasar-pt-br/qpanc-parte-11-quasar-componentes-diferenca-entre-spa-e-ssr-1a3c)
  * [Parte 12 - Quasar - Serviços](https://dev.to/quasar-pt-br/qpanc-parte-12-quasar-servicos-4e61)
  * [Parte 13 - Quasar - Regionalização e Stores](https://dev.to/quasar-pt-br/qpanc-parte-13-quasar-regionalizacao-e-stores-1kep)
  * [Parte 14 - Quasar - Consumindo a API](https://dev.to/quasar-pt-br/qpanc-parte-14-quasar-consumindo-a-api-fn6)
  * [Parte 15 - Quasar - Login](https://dev.to/quasar-pt-br/qpanc-parte-15-quasar-login-jc6)
  * [Parte 16 - Quasar - Áreas Protegidas](https://dev.to/quasar-pt-br/qpanc-parte-16-quasar-areas-protegidas-3jkn)
  * [Parte 17 - Quasar - Registro](https://dev.to/quasar-pt-br/qpanc-parte-17-quasar-registro-3b8c)
  * [Parte 18 - Docker - Maquina Virtual Linux](https://dev.to/quasar-pt-br/qpanc-parte-18-docker-maquina-virtual-linux-g5c)
  * [Parte 19 - Docker - Registro e Build](https://dev.to/quasar-pt-br/qpanc-parte-19-docker-registro-e-build-31i4)
  * [Parte 20 - Docker - Traefik e Publicação](https://dev.to/quasar-pt-br/qpanc-parte-20-docker-traefik-e-publicacao-3g3d)
  * [Demo Online](https://qpanc.tobiasmesquita.dev)

##3 Criando a aplicação ASP.NET Core

Abre o terminal de sua preferencia (recomendo o PowerShell 6 = [Download](https://github.com/PowerShell/PowerShell)) e execute os seguinte comando.

**criando a solução e os projetos**
```
dotnet new webapi -o QPANC.Api -f netcoreapp3.1
dotnet new classlib -o QPANC.Domain -f netstandard2.1
dotnet new classlib -o QPANC.Services -f netstandard2.1
dotnet new classlib -o QPANC.Services.Abstract -f netstandard2.1
```
**adicionando os projetos à solução**
```
dotnet sln QPANC.sln add .\QPANC.Api\QPANC.Api.csproj
dotnet sln QPANC.sln add .\QPANC.Domain\QPANC.Domain.csproj
dotnet sln QPANC.sln add .\QPANC.Services\QPANC.Services.csproj
dotnet sln QPANC.sln add .\QPANC.Services.Abstract\QPANC.Services.Abstract.csproj
```
**ligando os projetos**
```
dotnet add .\QPANC.Domain\QPANC.Domain.csproj reference .\QPANC.Services.Abstract\QPANC.Services.Abstract.csproj
dotnet add .\QPANC.Services\QPANC.Services.csproj reference .\QPANC.Domain\QPANC.Domain.csproj
dotnet add .\QPANC.Api\QPANC.Api.csproj reference .\QPANC.Services\QPANC.Services.csproj
```

![Resultado esperado após executar os comandos](https://dev-to-uploads.s3.amazonaws.com/i/g5fq6t2j9d8uzyysu9ka.png)

Ao abrir à solução (QPANC.sln) usando o Visual Studio, deverá abrir uma janela como à seguinte.:

![Visual Studio 2019](https://dev-to-uploads.s3.amazonaws.com/i/jmuf7y2mkzdggjy4vlcw.png)

##4 Adicionando Suporte ao Docker Compose.

Abra a solução, dê um clique com o botão direito do mouse sobre o projeto da API,  então selecione o menu `Add`, e por fim `Container Orchestrator Support...`

![Container Orchestrator Support](https://dev-to-uploads.s3.amazonaws.com/i/n6kdoh8ttnelpunk9ew2.png)

Então selecione `Docker Compose` e `Linux`.

Ao faze-lo, será adicionado um projeto chamado `docker-compose` à nossa solução e um `DockerFile` ao projeto API, assim como, o Docker Compose passou à ser o inicializador padrão.

![Docker Project](https://dev-to-uploads.s3.amazonaws.com/i/zvbntntgz0gndwj2b3ws.png)

Caso esteja utilizando o Visual Studio Code, você pode criar os seguintes arquivos manualmente:

**docker-compose.yml**
```
version: '3.4'

services:
  qpanc.api:
    image: ${DOCKER_REGISTRY-}qpancapi
    build:
      context: .
      dockerfile: QPANC.Api/Dockerfile
```
**docker-compose.override.yml**
```
version: '3.4'

services:
  qpanc.api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
    ports:
      - "34512:80"
      - "34513:443"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
```
**QPANC.Api/Dockerfile**
```
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["QPANC.Api/QPANC.Api.csproj", "QPANC.Api/"]
COPY ["QPANC.Services/QPANC.Services.csproj", "QPANC.Services/"]
COPY ["QPANC.Domain/QPANC.Domain.csproj", "QPANC.Domain/"]
COPY ["QPANC.Services.Abstract/QPANC.Services.Abstract.csproj", "QPANC.Services.Abstract/"]
RUN dotnet restore "QPANC.Api/QPANC.Api.csproj"
COPY . .
WORKDIR "/src/QPANC.Api"
RUN dotnet build "QPANC.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "QPANC.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "QPANC.Api.dll"]
```

Agora, execute a aplicação usando o Docker Compose e veja se uma pagina com o seguinte conteúdo será aberta.:

![Api](https://dev-to-uploads.s3.amazonaws.com/i/vuaw3kpoa1zq6twi4gnj.png)

Caso esteja usando o Visual Studio Code, use os seguintes comandos.:
```
docker-compose -f "C:\Repos\QPANC\docker-compose.yml" -f "C:\Repos\QPANC\docker-compose.override.yml" build
docker-compose -f "C:\Repos\QPANC\docker-compose.yml" -f "C:\Repos\QPANC\docker-compose.override.yml" up
```

então abra a URL `https://localhost:34513/weatherforecast`