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

.NET Core 6 ApiController无法处理int/string类型参数的问题

解决ApiController同时支持接收模型与基础类型参数的问题

一、修复单个基础类型参数的接收问题

你的控制器无法接收int这类基础类型参数,核心原因是ASP.NET Core默认不会从JSON请求体中绑定简单类型参数,需要显式指定参数来源。

1. 修改控制器代码

给int id参数添加[FromBody]特性,明确告诉框架从请求体读取数据:

[Route("Get"), HttpPost]
public async Task<JResultModel> Get([FromBody] int id)
{
    if (id == -1)
        // 你的业务逻辑代码
    return _JResult.Control(model);
}

2. 匹配AJAX请求数据格式

如果你的data是单个数值(比如let data = 123),直接序列化即可:

$.ajax({
    url: postUrl,
    data: JSON.stringify(data), // 序列化后为"123"
    contentType: 'application/json',
    type: 'POST',
    success: function (resultData) {
        console.log(resultData);
        return resultData;
    }
});

如果data是包含id的对象(比如let data = {id: 123}),可改用动态类型或自定义模型接收:

[Route("Get"), HttpPost]
public async Task<JResultModel> Get([FromBody] dynamic request)
{
    int id = request.id;
    // 你的业务逻辑代码
    return _JResult.Control(model);
}

二、实现同时支持模型与基础类型的通用方案

如果需要同一接口或不同接口兼容两种参数类型,可采用以下两种方案:

1. 重载Action方法

为不同参数类型定义独立的Action,通过路由区分:

// 处理基础类型int
[Route("Get/ById"), HttpPost]
public async Task<JResultModel> GetById([FromBody] int id)
{
    // 对应业务逻辑
}

// 处理自定义模型
[Route("Get/ByModel"), HttpPost]
public async Task<JResultModel> GetByModel([FromBody] YourCustomModel model)
{
    // 对应业务逻辑
}

2. 使用统一包装模型

定义通用包装类,兼容基础类型和自定义模型:

public class RequestWrapper<T>
{
    public T Data { get; set; }
}

// 控制器接收包装类
[Route("Get"), HttpPost]
public async Task<JResultModel> Get([FromBody] RequestWrapper<object> request)
{
    if (request.Data is int id)
    {
        // 处理int类型逻辑
    }
    else if (request.Data is YourCustomModel model)
    {
        // 处理模型逻辑
    }
    // 其他类型处理逻辑
    return _JResult.Control(resultModel);
}

对应的AJAX请求需要将数据包装在Data字段中:

// 发送int类型数据
let data = { Data: 123 };
// 发送自定义模型数据
let data = { Data: { Name: "测试", Id: 456 } };

$.ajax({
    url: postUrl,
    data: JSON.stringify(data),
    contentType: 'application/json',
    type: 'POST',
    success: function (resultData) {
        console.log(resultData);
        return resultData;
    }
});

关键注意事项

  • 务必保持请求的contentType为application/json,否则框架会按表单数据解析,无法正确绑定JSON格式参数。
  • 简单类型参数必须显式添加[FromBody]特性,否则ASP.NET Core会尝试从URL查询字符串或表单中读取,导致绑定失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:06:02