ASP.NET Core Web API

Manejo Eficiente de Múltiples Parámetros en Métodos GET de C#

Spread the love

Pasar múltiples parámetros a un método GET en C# es un requisito común en el desarrollo de API web. Este artículo explora varias técnicas para lograr esto dentro de ASP.NET Core, centrándose en la claridad, el mantenimiento y las mejores prácticas.

Tabla de contenido

Pasando parámetros a través del enrutamiento convencional

El enrutamiento convencional incorpora directamente los parámetros en la ruta de la URL. Este enfoque es adecuado para un pequeño número de parámetros que identifican directamente un recurso.

Ejemplo: Recuperando un producto en función de su ID y ID de categoría.

URL: /products/123/category/456


using Microsoft.AspNetCore.Mvc;

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

Limitaciones: Las URLs se vuelven menos legibles y mantenibles a medida que aumenta el número de parámetros. Es menos flexible para parámetros opcionales.

Usando enrutamiento de atributos y [FromQuery]

El enrutamiento de atributos proporciona un mayor control sobre la estructura de la URL. Usando [FromQuery], los parámetros se extraen de la cadena de consulta, haciendo que las URLs sean más limpias y fáciles de gestionar, incluso con numerosos parámetros.

Ejemplo: El mismo ejemplo de recuperación de producto, pero usando enrutamiento de atributos y [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 promueve una mejor organización y legibilidad de la URL. El atributo [ApiController] permite la validación automática del modelo y el manejo de respuestas.

Manejo de parámetros opcionales

Los parámetros opcionales mejoran la flexibilidad. Use valores predeterminados dentro de la firma de la acción del 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}");
}

Aquí, pageSize tiene un valor predeterminado de 10 si no se proporciona en la cadena de consulta.

Aprovechando el enlace de modelos

Para múltiples parámetros, considere crear un modelo dedicado. Esto mejora la organización y el mantenimiento del código. ASP.NET Core enlazará automáticamente la cadena de consulta a las propiedades del 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}");
}

Manejo robusto de errores

Siempre maneje posibles errores, como parámetros obligatorios que faltan o tipos de datos no válidos. Use técnicas como la validación de modelos o comprobaciones explícitas de parámetros para manejar estas situaciones con elegancia.


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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *