ASP.NET Core Web API

Эффективная обработка множественных параметров в методах GET C#

Spread the love

Передача нескольких параметров методу GET в C# — распространенное требование при разработке веб-API. В этой статье рассматриваются различные методы достижения этого в ASP.NET Core, с акцентом на ясность, поддерживаемость и лучшие практики.

Содержание

Передача параметров с помощью традиционной маршрутизации

Традиционная маршрутизация напрямую включает параметры в путь URL. Этот подход подходит для небольшого количества параметров, которые напрямую идентифицируют ресурс.

Пример: Получение продукта на основе его ID и ID категории.

URL: /products/123/category/456


using Microsoft.AspNetCore.Mvc;

public class ProductsController : Controller
{
    public IActionResult GetProduct(int productId, int categoryId)
    {
        // Обработка productId и categoryId
        return Ok($"Product ID: {productId}, Category ID: {categoryId}");
    }
}

Ограничения: URL становятся менее читаемыми и поддерживаемыми по мере увеличения количества параметров. Менее гибко для необязательных параметров.

Использование атрибутной маршрутизации и [FromQuery]

Атрибутная маршрутизация обеспечивает больший контроль над структурой URL. Используя [FromQuery], параметры извлекаются из строки запроса, что делает URL более чистыми и управляемыми, даже при большом количестве параметров.

Пример: Тот же пример получения продукта, но с использованием атрибутной маршрутизации и [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}");
    }
}

Этот метод способствует лучшей организации и читаемости URL. Атрибут [ApiController] обеспечивает автоматическую валидацию модели и обработку ответов.

Обработка необязательных параметров

Необязательные параметры повышают гибкость. Используйте значения по умолчанию в сигнатуре действия контроллера.


[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}");
}

Здесь pageSize по умолчанию равен 10, если не указан в строке запроса.

Использование привязки модели

Для нескольких параметров рассмотрите создание специальной модели. Это улучшает организацию кода и поддерживаемость. ASP.NET Core автоматически свяжет строку запроса со свойствами модели.


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}");
}

Надежная обработка ошибок

Всегда обрабатывайте потенциальные ошибки, такие как отсутствие обязательных параметров или неверные типы данных. Используйте такие методы, как валидация модели или явная проверка параметров, чтобы корректно обрабатывать эти ситуации.


[HttpGet]
public IActionResult GetProduct(ProductFilter filter)
{
    if (filter.ProductId == 0)
    {
        return BadRequest("Product ID is required.");
    }
    // ... остальная часть вашей логики ...
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *