Liberar consumo de API C#
Published: 2024-07-09 23:55:22

Apesar de parecer simples liberar API para uso no visual studio, no meu caso sempre veio com algum problema que fizesse com que desse erro nas requisições pelo postman, dispositivo móvel ou por algum projeto.
Dito isso, eu fiquei quebrando cabeça pra resolver e abaixo eu listei algumas coisas que podem resolver esse problema.

## CORS #1
A primeira coisa a ser feita é liberar o CORS(lá ele), mas antes vamos entender o que é e como funciona.

#### O que é?

CORS significa Cross-Origin Resource Sharing que consiste em um mecanismo que permite aplicações web façam requisições para um servidor em outro domínio além da aplicação que está hospedada. 

#### Como funciona?
Em resumo, o CORS funciona como um validador de origem, afim de garantir segurança do usuário.

#### Algumas configurações

- Access-Control-Allow-Origin: Especifica quais origens podem acessar os recursos.
- Access-Control-Allow-Methods: Especifica quais métodos HTTP (GET, POST, etc.) são permitidos para a requisição.
- Access-Control-Allow-Headers: Especifica quais cabeçalhos HTTP podem ser usados na requisição.
- Access-Control-Allow-Credentials: Indica se os cookies e credenciais HTTP podem ser incluídos na requisição (usado em requisições com credenciais, como cookies de autenticação).

### Resolução

No arquivo program.cs da API no visual Studio larga o seguinte código, só confere antes se você já não tinha adicionado algo antes:

`var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll",
        builder =>
        {
            builder.AllowAnyOrigin()
                   .AllowAnyMethod()
                   .AllowAnyHeader();
        });
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseCors("AllowAll");
app.UseAuthorization();
app.MapControllers();
app.Run();
`

## Kestrel #2
Antes de fazer este passo recomendo que faça o passo anterior e teste

#### O que é?

Kestrel é um servidor integrado fornecido pelo ASP.NET Core e responsável por processar as requisições HTTP.

#### Como funciona?

Este servidor funciona otimizando e organizando as requisições que são feitas, a partir das configurações de porta, Ip e certificados SSL. Além disso, é importante que destacar que é multiplataforma.

#### Resolução
A configuração abaixo deve ser feita dentro do arquivo appsettings.json, sendo HTTP e/ou HTTPs. Lembrando que a porta vai alterar de acordo com o que você usa.

`{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:5111"
      },
      "Https": {
        "Url": "https://0.0.0.0:5001",
        "Certificate": {
          "Path": "certificate.pfx",
          "Password": "password"
        }
      }
    }
  }
}
`

## Liberando portas no firewall

Siga os prints abaixo. Lembrando que faremos isso pra entrada e para saida.

#### Entrada

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/88jzoxiu7iapemotqv7b.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o8yfubc71e6ljus0wewx.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yyn3dt5oe1vfbwgh57n.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ciho8tofec6qrdp3l4up.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v2vn1glbjidvo5fatn4u.png)

#### Saída

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipu8oslq1byrv3kvhpu5.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ggjqgp5qgs2ievznyiph.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sh0h51h87olqidq9o5g2.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0bapmk5wcymnkv01jcx.png)