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
- Usando enrutamiento de atributos y [FromQuery]
- Manejo de parámetros opcionales
- Aprovechando el enlace de modelos
- Manejo robusto de errores
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 ...
}