IRONSOFTWAREHOME

Gerenciamento de CORS e Testes - Curso de Criação de uma API de Exemplo em C#

Gerenciando CORS e Testando - Criando uma API de Exemplo em C# - Curso

Tim Corey

16m 06s

Ao trabalhar com APIs web em C#, o CORS (Cross-Origin Resource Sharing) frequentemente se torna um obstáculo, especialmente quando o frontend e o backend estão em domínios ou portas diferentes. É um cenário comum no desenvolvimento de software moderno, onde APIs servem clientes de front-end como Blazor WebAssembly, Angular ou React.

Em seu tutorial em vídeo sobre " Gerenciando CORS e Testando - Criando uma API de Exemplo em C# ", Tim Corey demonstra como gerenciar CORS de forma eficaz ao criar e testar uma API de exemplo. Essa abordagem ajuda os desenvolvedores não apenas a corrigir problemas de origem cruzada, mas também a se prepararem para técnicas de teste mais avançadas, como testes unitários, testes de integração e fluxos de trabalho automatizados.

Vamos analisar o vídeo e seguir as instruções do Tim passo a passo.

Configurando o frontend Blazor

Tim inicia a aula criando um projeto simples de front-end em Blazor WebAssembly chamado SampleTestUI. Este frontend não está pronto para produção; trata-se de um projeto de teste para verificar a conectividade com a API e provocar intencionalmente um problema de CORS.

  • Tim usa o modelo .NET 9 e opta por não usar os recursos de autenticação ou PWA.

  • O objetivo do frontend é simular chamadas de API do mundo real e expor falhas de teste relacionadas a solicitações de origem cruzada.

Ele modifica a página inicial para chamar o endpoint da API /courses e exibir uma lista de cursos com as respectivas imagens.

O frontend utiliza uma classe de modelo simples (CourseModel) criada separadamente, em vez de compartilhar o modelo com a API. Tim enfatiza que os modelos de front-end devem ser separados dos modelos de acesso a dados para reduzir o acoplamento e aumentar a capacidade de manutenção (2:28). Este é um princípio importante ao escrever testes de fácil manutenção e código testável.

Escrevendo a chamada da API

Para obter dados da API:

  • Tim injeta um HttpClient.

Ele escreve um método assíncrono usando Http.GetFromJsonAsync <List<CourseModel>>().

  • O método está codificado com a URL da API local (4:00), servindo como um teste simples para validar a comunicação entre o frontend e o backend.

Aqui não há método de teste nem tratamento de erros, apenas uma chamada direta. Essa configuração espelha os primeiros passos na escrita de testes unitários, onde você começa validando a interação básica entre os componentes.

Criando a lógica de busca de dados e a interface do usuário.

Após definir o URL da API às 4:00, Tim se concentra em construir a lógica principal para buscar os dados do curso na API e exibi-los no frontend Blazor . Este é um passo crucial para validar se o frontend consegue interagir com o backend, mesmo antes de escrever testes automatizados ou usar uma estrutura de testes.

Primeiro, ele garante que a URL correta seja usada a partir do arquivo launchSettings.json da API — obtendo o endereço HTTPS e adicionando /courses para formar o endpoint completo. Isso é importante porque os navegadores geralmente rejeitam chamadas de API não HTTPS provenientes de páginas seguras.

courses = await Http.GetFromJsonAsync<List<CourseModel>>("https://localhost:port/courses");

Exibindo os dados

Após a obtenção dos dados, Tim escreve um loop de interface do usuário simples usando a sintaxe Razor para iterar pela lista de cursos:

@foreach (var c in courses) { <a href="@c.CourseUrl"> <img width="300" src="@c.CourseImage" /> </a> }

Cada curso é apresentado como uma imagem envolta em um hiperlink. Tim observa que as imagens são grandes (1920x1080), então ele limita a largura a 300px para evitar sobrecarregar a página.

Essa saída serve como uma confirmação visual de que os dados da API estão fluindo corretamente para o frontend. Isso simula o tipo de feedback que você esperaria de um método de teste aprovado — se as imagens aparecerem, a solicitação foi bem-sucedida.

Preparando-se para o lançamento

Antes de executar o aplicativo, Tim configura vários projetos de inicialização no Visual Studio. Ele configura o projeto da API para iniciar primeiro, seguido pelo frontend Blazor . Essa ordem é essencial para garantir que a API esteja pronta quando o frontend tentar buscar dados.

Esta etapa final, às 6h30, prepara o terreno para a execução do teste — e para o encontro com o erro CORS —, que é onde começa a próxima parte do tutorial.

Enfrentando o obstáculo do CORS

Ao executar ambos os projetos simultaneamente usando o explorador de soluções do Visual Studio, Tim faz com que a interface tente chamar a API, mas falhe. O console do navegador exibe uma mensagem familiar:

"O acesso para buscar em '[URL da API]' a partir da origem '[URL do Frontend]' foi bloqueado pela política CORS..."(7:02)

É aqui que a compreensão e a gestão do CORS se tornam essenciais. Sem os cabeçalhos adequados, o navegador bloqueia as solicitações de uma origem para outra.

Criando uma classe de configuração CORS

Em vez de sobrecarregar o arquivo Program.cs, Tim cria uma classe dedicada chamada CorsConfig em uma pasta Startup. Ele utiliza uma estrutura de classe estática para aplicar o mesmo padrão de configuração usado para o Swagger e a configuração do OpenAPI.

Isso está em consonância com as práticas de código limpo e torna o aplicativo mais testável. Configurações modulares como essa também facilitam a escrita de métodos de teste unitário posteriormente, porque a lógica fica isolada e mais fácil de simular ou sobrescrever.

Aplicando uma política CORS permissiva

Tim define uma política CORS muito aberta para permitir acesso total entre origens diferentes:

policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();

Essa configuração é útil no desenvolvimento orientado a testes e em testes de integração, onde serviços externos ou aplicativos de front-end precisam de acesso total à API. Tim chama essa política de "AllowAll" e armazena o nome em uma constante para evitar erros de digitação e inconsistências (11:00):

private const string AllowAllPolicy = "AllowAll";

Ele destaca que isso não deve ser usado em produção, mas é ideal para testar APIs localmente ou dentro de contêineres Docker, onde os desenvolvedores estão experimentando ou escrevendo testes unitários em endpoints reais.

Integrando a configuração em Program.cs

Tim registra os serviços CORS e aplica a configuração em Program.cs:

builder.Services.AddCorsServices(); app.ApplyCorsConfig();

Essa modularidade melhora a qualidade do código e facilita a adição de frameworks de mocking ou a injeção de comportamentos de teste no futuro. Isso reflete a forma como você estruturaria as coisas para testes unitários em C#, onde ter configurações centralizadas pode simplificar a configuração dos testes.

Testando novamente o frontend

Após aplicar a correção de CORS, Tim executa novamente ambos os aplicativos. Desta vez, o frontend Blazor funciona como esperado: os dados do curso são carregados com sucesso e cada imagem do curso possui um link para o URL correspondente.

É importante ressaltar que nenhuma alteração foi feita na interface. A correção completa ocorreu no nível da API, por meio da configuração adequada do CORS.

Lições sobre estratégia de teste e configuração

Embora Tim não aborde diretamente as estruturas de teste de unidade neste vídeo, sua abordagem estabelece as bases para isso. Eis como:

Ele separa as responsabilidades de forma clara, possibilitando o uso de classes de teste e objetos simulados no futuro.

  • O arquivo de configuração CORS dedicado pode ser reutilizado ou substituído por uma configuração simulada durante os testes.

  • Seu projeto rápido de front-end funciona como um teste de integração manual — uma validação inicial antes de escrever projetos completos de teste unitário.

Isso reflete a forma como você abordaria os testes no Visual Studio:

  • Crie um projeto de teste unitário em paralelo com sua aplicação principal.

  • Utilize o Test Explorer para executar todos os métodos de teste e acompanhar os resultados.

  • Simule dependências externas, como requisições HTTP, chamadas a bancos de dados ou arquivos de configuração.

  • Escreva testes unitários simples para validar o comportamento esperado e, em seguida, expanda-os para abranger casos de teste com condições extremas.


Considerações sobre testes unitários para cenários CORS

Embora o vídeo de Tim trate principalmente da configuração do CORS, as implicações para os testes de software são claras:

Você pode criar métodos de teste unitário que validem seus serviços de configuração.

  • Utilizando frameworks de mocking, simule fatores externos como diferentes origens ou métodos HTTP.

  • Execute testes como parte do seu processo de CI/CD para confirmar se seus métodos de teste são aprovados de forma consistente.

  • Incorpore testes no Explorador de Testes do Visual Studio para acompanhar as falhas e garantir a estabilidade.

Conclusão

Neste tutorial em vídeo , Tim Corey oferece um exemplo prático de gerenciamento de CORS em uma API Web C# enquanto cria um frontend Blazor simples para testar a conectividade. Sua abordagem não se limita a corrigir um erro do navegador; ela estabelece uma estrutura que incentiva a manutenção de código, uma arquitetura limpa e a fácil extensão para testes automatizados.

A partir daqui, os desenvolvedores podem avançar com confiança para a escrita de testes unitários, configuração de testes de integração e uso de ferramentas como Visual Studio, Test Explorer e frameworks de mocking para melhorar a qualidade e a confiabilidade do código.

Quer você esteja aprendendo como iniciar os testes, escrever seu primeiro teste unitário ou garantir que os métodos de teste falhem quando esperado, esta lição fornece a base para um processo de desenvolvimento sólido. E o mais importante: tudo começa com a arquitetura e a configuração corretas.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.