ASP.NET Core -  Recebendo parâmetros


 Neste artigo veremos 4 formas básicas de receber parâmetros em uma API.

De forma bem simples, podemos receber parâmetros em uma ASP .NET Core WEB API usando: query strings, informando os parâmetros no path, usando o body do request e usando o cabeçalho do request.

1- Passando parâmetros via Query String

Vamos supor que você tenha duas chaves de string de consulta: nome e idade.

Para adicionar esses parâmetros via query string ou string de consulta, basta adicionar os parâmetros de método com nomes que correspondam aos nomes de chave de string de consulta (nome e servico):

Assim em um projeto com um controlador TesteController onde temos a entidade Cliente:

public class Cliente
{
    public Guid Id { get; set; }
    public string? Nome { get; set; }   
    public int Idade { get; set; }   
}

Podemos definir o método Get contendo os nomes e tipos das chaves que desejamos enviar como parãmetro:

[Route("api/[controller]")]
[ApiController]
public class TesteController : ControllerBase
{
    [HttpGet()]
    public Cliente Get(string nome, int idade)
    {
        return new Cliente()
        {
            Id = Guid.NewGuid(),
            Nome = nome,
            Idade = idade
        };
    }
}

Agora para passar os parâmetro via query string basta digitarmos no navegador:

https://localhost/api/teste?nome=Maria&idade=23

Os valores da string de consulta são mapeados para os parâmetros do método (nome, idade) e retorna a seguinte resposta 200 (OK):

Usando a interface do Swagger basta informar os valores dos parâmetros na interface:

Exibindo a seguinte resposta:

Usando parâmetros em rotas

Para adicionar parâmetros de caminho, configure a rota (no atributo HttpGet) com os nomes dos parâmetros e, em seguida, adicione os parâmetros de método com nomes correspondentes:

    [HttpGet("{nome}/{idade}")]
    public Cliente Get2(string nome, int idade)
    {
        return new Cliente()
        {
            Id = Guid.NewGuid(),
            Nome = nome,
            Idade = idade
        };
    } 

A seguir basta enviar um request com os valores dos parâmetros como parte do caminho :

https://localhost:7278/api/teste/paulo/33

Acima temos o resultado obtido.

Usando o Body do Request

Quando você tem vários parâmetros, é comum encapsulá-los em um tipo complexo e obtê-los do corpo do Request.

Para fazer isso, adicione o tipo complexo como um parâmetro de método:

    [HttpPost()]
    public IActionResult Post(Cliente cliente)
    {
        return Ok($"Postado {cliente.Nome}");
    }

A seguir basta enviar o request com o JSON no body. Usando o Postman podemos fazer assim:

Nota: Para instalar o Postman acesse esse link : https://www.getpostman.com/apps ou abra o Google Chrome e digite postam e a seguir clique no link:  Postman - Chrome Web Store

O JSON do body do request é desserializado e mapeado para o parâmetro Cliente retornando uma resposta 200 (OK) e o o texto Postado Macoratti.

Usando Header do request

Às vezes é útil enviar parâmetros por meio de cabeçalhos do request. Estes são frequentemente usados em adição a outros parâmetros.

Para adicionar um parâmetro de cabeçalho do request, basta adicionar um parâmetro de método com o mesmo nome do cabeçalho e aplicar o atributo [FromHeader] a ele.

Para mostrar isso vamos incluir na entidade Cliente a propriedade ImagemUrl:

public class Cliente
{
    public Guid Id { get; set; }
    public string? Nome { get; set; }   
    public int Idade { get; set; }  
    public string ImagemUrl { get; set; }
}

Estamos definindo o Id usando o struct Guid.

O struct Guid representa um identificador único global: um valor de 16 bytes que se gerado randomicamente irá gerar um identificador (quase) único.

A seguir vamos incluir no controlador TesteController o endpoint a seguir:

    [HttpGet("{nome}/{idade}")]
  public Cliente Get3(string nome, int idade, 
                        [FromHeader] bool incluirImagem)
  {
        string imagemUrl = null;
        if (incluirImagem)
            imagemUrl = $"{nome}.png";
        return new Cliente()
        {
            Id = Guid.NewGuid(),
            Nome = nome,
            Idade = idade,
            ImagemUrl = imagemUrl
        };
    }

Usando o método NewGuid() geramos de forma automática um identificador único atribuindo ao Id.

A seguir podemos usar o Postman e montar o seguinte request:

Observe que informamos  : GET https://localhost:7278/api/teste/Amanda/33

E informamos no Header o valor :  incluirImagem True

Podemos também usar a interface do Swagger informando os valores :

Segue o código completo do controlador TesteController:

using Api_CSV.Models;
using Microsoft.AspNetCore.Mvc;
namespace Api_CSV.Controllers;
[Route("api/[controller]")]
[ApiController]
public class TesteController : ControllerBase
{
    [HttpGet()]
    public Cliente Get(string nome, int idade)
    {
        return new Cliente()
        { 
            Id = Guid.NewGuid(),
            Nome = nome,
            Idade = idade
        };
    }
    //[HttpGet("{nome}/{idade}")]
    //public Cliente Get2(string nome, int idade)
    //{
    //    return new Cliente()
    //    {
    //        Id = Guid.NewGuid(),
    //        Nome = nome,
    //        Idade = idade
    //    };
    //}
    [HttpGet("{nome}/{idade}")]
    public Cliente Get3(string nome, int idade,
                     [FromHeader] bool incluirImagem)
    {
        string imagemUrl = null;
        if (incluirImagem)
            imagemUrl = $"{nome}.png";
        return new Cliente()
        {
            Id = Guid.NewGuid(),
            Nome = nome,
            Idade = idade,
            ImagemUrl = imagemUrl
        };
    }
    [HttpPost()]
    public IActionResult Post(Cliente cliente)
    {
        return Ok($"Postado {cliente.Nome}");
    }
}

E estamos conversados...

"Já estou crucificado com Cristo; e vivo, não mais eu, mas Cristo vive em mim; e a vida que agora vivo na carne, vivo-a pela fé do Filho de Deus, o qual me amou, e se entregou a si mesmo por mim"
Gálatas 2:20

Referências:


José Carlos Macoratti