MVC (Model View Controller)
Model
View
Controller
Uma Controller é uma classe C# responsável por agrupar um conjunto de endpoints (ou actions) relacionados. Ela recebe requisições HTTP, processa a lógica necessária e retorna uma resposta.
É o ponto de entrada principal da API. É o pilar do padrão MVC (Model-View-Controller) em APIs.
Anatomia de uma Controller
Uma controller típica possui os seguintes elementos (exemplo completo em src/api/Apps/TaskManager/):
// 1. Atributos que definem o comportamento da controller
[ApiController]
[Route("api/[controller]")] // Define a rota base: ex: /api/tasks
public class TasksController : ControllerBase // 2. Herda de ControllerBase
{
// 3. Métodos (Actions) que respondem a verbos HTTP
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "Task 1", "Task 2" };
}
}
- Atributos:
[ApiController]: Habilita um conjunto de funcionalidades úteis, como a inferência automática de origem dos parâmetros (model binding) e a validação automática doModelState.-
[Route("api/[controller]")]: Define o padrão da URL para acessar esta controller.[controller]é um token que é substituído pelo nome da classe sem o sufixo "Controller" (neste caso,tasks). -
Herança de
ControllerBase: Fornece acesso a métodos e propriedades úteis para lidar com requisições HTTP, comoOk(),NotFound(),BadRequest(), e acesso aoHttpContext. -
Actions (Ações): São os métodos públicos dentro da controller que respondem às requisições. Cada action é mapeada para um verbo HTTP através de atributos:
[HttpGet]: Para buscar dados.[HttpPost]: Para criar um novo recurso.[HttpPut]: Para atualizar um recurso existente.[HttpDelete]: Para remover um recurso.
Como Criar uma Controller
-
Crie o projeto: Use o template
webapi.bash dotnet new webapi -o MinhaApi -
Crie o arquivo: Dentro da pasta
Controllers, crie uma nova classe com o sufixoController. Ex:ProductsController.cs. - Implemente a classe: Faça a classe herdar de
ControllerBasee adicione os atributos[ApiController]e[Route]. - Adicione as Actions: Crie os métodos públicos e decore-os com os atributos de verbo HTTP (
[HttpGet],[HttpPost], etc.).