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

React调用.NET Core API:GET方法接收对象参数的最优方案

多条件搜索的.NET Core API最优实现方案

首先纠正你的误解:GET请求完全支持接收复杂对象作为参数,.NET Core的模型绑定机制会自动把URL中的查询字符串映射到你的SearchParams类实例上,根本不需要逐个定义所有参数。

最优实现方式

直接将SearchParams作为GET方法的参数,配合[FromQuery]特性(虽然GET请求中复杂类型默认就是从查询字符串绑定,加上该特性会让代码意图更清晰):

// 你的SearchParams类保持不变
public class SearchParams
{
    public string TemplateName { get; set; } = "";
    public DateTime DateFrom { get; set; }
    public DateTime DateTo { get; set; }
    public string CreatedBy { get; set; } = "";
    public Guid Id { get; set; }
}

// API控制器中的GET方法
[HttpGet]
public IEnumerable<Recipe> Get([FromQuery] SearchParams searchParams)
{
    // 这里编写数据库筛选逻辑,示例用EF Core:
    var query = _context.Recipes.AsQueryable();

    // 仅当参数有值时应用筛选,避免空条件干扰结果
    if (!string.IsNullOrEmpty(searchParams.TemplateName))
    {
        query = query.Where(r => r.TemplateName.Contains(searchParams.TemplateName));
    }
    if (searchParams.DateFrom != default)
    {
        query = query.Where(r => r.CreatedDate >= searchParams.DateFrom);
    }
    if (searchParams.DateTo != default)
    {
        query = query.Where(r => r.CreatedDate <= searchParams.DateTo);
    }
    if (!string.IsNullOrEmpty(searchParams.CreatedBy))
    {
        query = query.Where(r => r.CreatedBy == searchParams.CreatedBy);
    }
    if (searchParams.Id != default)
    {
        query = query.Where(r => r.Id == searchParams.Id);
    }

    return query.ToList();
}

前端React传递参数的方式

React中使用axios或fetch时,直接将搜索条件对象作为params传递即可,框架会自动将其转换为URL查询字符串:

// 示例:使用axios调用API
import axios from 'axios';

const fetchFilteredRecipes = async (searchConditions) => {
    // 将日期转换为ISO格式,确保.NET Core能正确解析
    const formattedParams = {
        ...searchConditions,
        DateFrom: searchConditions.DateFrom?.toISOString(),
        DateTo: searchConditions.DateTo?.toISOString()
    };

    const response = await axios.get('/api/recipes', {
        params: formattedParams
    });
    return response.data;
};

// 调用示例
fetchFilteredRecipes({
    TemplateName: "戚风蛋糕",
    DateFrom: new Date('2024-01-01'),
    CreatedBy: "chef_li"
});

为什么这是最优方案

  1. 可维护性高:当搜索条件增加/删除时,只需要修改SearchParams类,无需改动API方法签名,避免了参数过多导致的代码臃肿。
  2. 符合REST规范:搜索属于资源查询操作,用GET请求更合适——GET请求可被浏览器缓存、支持书签保存,而POST通常用于创建/修改资源,语义上不匹配。
  3. 代码简洁:模型绑定自动处理参数映射,无需手动解析查询字符串。

注意事项

  • 对于可选参数,一定要添加空值判断,避免默认值(比如DateTime的default)导致意外的筛选结果。
  • 日期参数建议传递ISO格式字符串,确保跨语言/框架的兼容性。
  • 如果涉及复杂筛选(如数组、嵌套对象),.NET Core也支持通过模型绑定处理,可根据需求自定义绑定规则或调整参数传递方式。

内容的提问来源于stack exchange,提问作者Sandeep Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:58