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

.NET Core中如何通过HttpGet方法经URL传递对象?

解决.NET Core HttpGet方法接收对象参数的问题

首先得敲黑板说清楚核心问题:HttpGet请求按照HTTP规范是不携带请求体的,所以你用[FromBody]来绑定参数在Get方法里完全不生效,这就是当前写法失效的根本原因。而且客户端直接把data对象拼在URL里的方式也不对,服务器没法直接把这个字符串解析成你的ViewModel实例。

下面给你两种实用的解决方案,按需选择:

方案一:拆分对象属性为独立查询参数(推荐)

这是最符合HttpGet规范的做法,把对象的每个属性作为URL的查询参数传递。

客户端请求示例

把参数拆成键值对拼在URL里:

http://localhost/controller/GetObject?Id=1&Name=xxx

如果是JavaScript发起请求,也可以用URLSearchParams来更优雅地构建:

let data = { "Id":1, "Name":"xxx" };
let params = new URLSearchParams(data);
let url = `http://localhost/controller/GetObject?${params.toString()}`;
// 发起Get请求

控制器代码修改

用[FromQuery]特性标记你的ViewModel参数,.NET Core会自动把查询字符串里的键值对匹配到对象的属性上(属性名大小写不敏感):

// 先确保你的ViewModel定义正确
public class ViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

[HttpGet]
public IActionResult GetObject([FromQuery] ViewModel model)
{
    // 这里model已经被正确绑定,可以直接使用
    if (model.Id == 0 || string.IsNullOrEmpty(model.Name))
    {
        return BadRequest("参数不完整");
    }
    return Ok(model);
}

方案二:传递序列化后的JSON字符串(仅特殊场景使用)

如果因为某些原因必须传递整个对象的结构,可以把对象序列化为JSON字符串,编码后作为单个查询参数传递。但要注意:URL有长度限制,复杂/大数据量的对象不适合这种方式。

客户端请求示例

先序列化对象为JSON,再进行URL编码:

let data = { "Id":1, "Name":"xxx" };
let encodedJson = encodeURIComponent(JSON.stringify(data));
let url = `http://localhost/controller/GetObject?model=${encodedJson}`;
// 发起Get请求

控制器代码修改

接收字符串参数后手动反序列化为ViewModel:

using System.Text.Json;

[HttpGet]
public IActionResult GetObject([FromQuery] string model)
{
    if (string.IsNullOrWhiteSpace(model))
    {
        return BadRequest("缺少model参数");
    }
    try
    {
        var viewModel = JsonSerializer.Deserialize<ViewModel>(model);
        // 处理业务逻辑
        return Ok(viewModel);
    }
    catch (JsonException)
    {
        return BadRequest("model参数格式错误");
    }
}

总结

优先选择方案一,既符合HTTP规范,又简单易维护,还没有URL长度的顾虑。方案二只适合非常特殊的场景,尽量避免使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:27:36