You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .NET Web API如何封装可复用多查询参数结构体或类

.NET Core 3.1 Web API 分页参数冗余问题解决方案

完全可以通过封装公共分页参数类型消除重复代码,.NET Core 3.1 原生支持复杂类型的查询字符串绑定,不需要额外引入第三方组件。

具体实现

  • 定义公共分页参数类
    直接将通用分页字段封装为独立类,可直接在类上标注[FromQuery]特性,指定该类型默认从请求Query中绑定参数,同时可以在类中配置默认值、参数校验规则,框架会自动执行校验,不需要在每个接口重复写判断逻辑:
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;

[FromQuery]
public class PaginationQuery
{
    /// <summary>
    /// 页码,默认值1
    /// </summary>
    [Range(1, int.MaxValue, ErrorMessage = "页码必须大于等于1")]
    public int Page { get; set; } = 1;

    /// <summary>
    /// 单页数据量,默认值20,最大限制100
    /// </summary>
    [Range(1, 100, ErrorMessage = "单页数据量需在1-100范围内")]
    public int PerPage { get; set; } = 20;
}
  • 接口中直接引用该类型
    所有需要分页功能的GET接口,直接将该类型作为入参即可,不需要重复声明两个int类型的分页参数,也不需要重复加[FromQuery]特性,框架会自动把请求URL中?page=xxx&perPage=xxx的查询值绑定到对应属性:
[ApiController]
[Route("api/[controller]")]
public class GoodsController : ControllerBase
{
    private readonly IGoodsService _goodsService;

    public GoodsController(IGoodsService goodsService)
    {
        _goodsService = goodsService;
    }

    // 分页获取商品列表
    [HttpGet]
    public async Task<IActionResult> GetList(PaginationQuery pagination)
    {
        // 直接通过pagination.Page、pagination.PerPage获取分页参数
        var list = await _goodsService.GetPagedListAsync(pagination.Page, pagination.PerPage);
        return Ok(new
        {
            pagination.Page,
            pagination.PerPage,
            Total = list.TotalCount,
            Items = list.Items
        });
    }
}

该绑定方式和你之前单独声明[FromQuery] int page, [FromQuery] int perPage的效果完全一致,前端不需要修改任何传参逻辑,原有请求可以无缝兼容。

后续扩展

如果后续需要调整分页逻辑,比如新增排序字段、筛选条件、修改默认值、调整参数校验规则,只需要修改PaginationQuery类即可,所有引用该类的接口会自动同步变更,不需要逐个接口修改参数声明。
如果需要自定义更复杂的绑定逻辑(比如兼容不同命名的参数传值,比如支持前端传pageSize映射到PerPage),可以自定义模型绑定器全局注册,所有分页参数自动生效。

注意:如果项目中POST、PUT等其他类型的接口也需要复用该分页参数结构,不要在类上标注[FromQuery],只需要在GET接口的入参前单独加[FromQuery]即可,避免影响其他请求类型的参数绑定逻辑。

内容的提问来源于stack exchange,提问作者Noy Bueno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:57:33