ASP.NET Core Web API

Lidando Eficientemente com Múltiplos Parâmetros em Métodos GET C#

Spread the love

Passar múltiplos parâmetros para um método GET em C# é um requisito comum no desenvolvimento de APIs web. Este artigo explora várias técnicas para alcançar isso dentro do ASP.NET Core, focando em clareza, manutenibilidade e melhores práticas.

Sumário

Passando Parâmetros via Roteamento Convencional

O roteamento convencional incorpora diretamente os parâmetros no caminho da URL. Esta abordagem é adequada para um pequeno número de parâmetros que identificam diretamente um recurso.

Exemplo: Recuperando um produto com base em seu ID e ID de categoria.

URL: /products/123/category/456


using Microsoft.AspNetCore.Mvc;

public class ProductsController : Controller
{
    public IActionResult GetProduct(int productId, int categoryId)
    {
        // Processa productId e categoryId
        return Ok($"Product ID: {productId}, Category ID: {categoryId}");
    }
}

Limitações: As URLs tornam-se menos legíveis e manuteníveis à medida que o número de parâmetros aumenta. É menos flexível para parâmetros opcionais.

Usando Roteamento por Atributos e [FromQuery]

O roteamento por atributos fornece maior controle sobre a estrutura da URL. Usando [FromQuery], os parâmetros são extraídos da string de consulta, tornando as URLs mais limpas e gerenciáveis, mesmo com vários parâmetros.

Exemplo: O mesmo exemplo de recuperação de produto, mas usando roteamento por atributos e [FromQuery].

URL: /products?productId=123&categoryId=456


using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet]
    public IActionResult GetProduct([FromQuery] int productId, [FromQuery] int categoryId)
    {
        return Ok($"Product ID: {productId}, Category ID: {categoryId}");
    }
}

Este método promove melhor organização e legibilidade da URL. O atributo [ApiController] permite a validação automática de modelos e o tratamento de respostas.

Lidando com Parâmetros Opcionais

Parâmetros opcionais melhoram a flexibilidade. Use valores padrão na assinatura da ação do controlador.


[HttpGet]
public IActionResult GetProduct([FromQuery] int productId, [FromQuery] int categoryId, [FromQuery] int pageSize = 10)
{
    return Ok($"Product ID: {productId}, Category ID: {categoryId}, Page Size: {pageSize}");
}

Aqui, pageSize assume o valor padrão 10 se não fornecido na string de consulta.

Aproveitando o Binding de Modelo

Para múltiplos parâmetros, considere criar um modelo dedicado. Isso melhora a organização e a manutenibilidade do código. O ASP.NET Core vinculará automaticamente a string de consulta às propriedades do modelo.


public class ProductFilter
{
    public int ProductId { get; set; }
    public int CategoryId { get; set; }
    public int PageSize { get; set; } = 10; 
}

[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
    return Ok($"Product ID: {filter.ProductId}, Category ID: {filter.CategoryId}, Page Size: {filter.PageSize}");
}

Tratamento Robusto de Erros

Sempre trate erros potenciais, como parâmetros obrigatórios ausentes ou tipos de dados inválidos. Use técnicas como validação de modelo ou verificações explícitas de parâmetros para lidar com essas situações de forma elegante.


[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
    if (filter.ProductId == 0)
    {
        return BadRequest("Product ID is required.");
    }
    // ... resto da sua lógica ...
}

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *