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

已设置[FromBody]和Content-Type,Controller Action仍无法接收Fetch API的JSON请求

问题原因及解决办法

你遇到的问题是请求体结构与控制器参数不匹配导致绑定失败:

  • 前端发送的是包含ProductPriceGroupID字段的JSON对象(如{"ProductPriceGroupID": 123})
  • 但控制器参数是单个int类型,ASP.NET Core的JSON序列化器无法将对象直接映射到基本类型参数,因此默认赋值为int的默认值0。

解决办法(二选一即可)

方法1:修改前端请求体,直接传递纯数值

将body: JSON.stringify(data)改为直接序列化数值本身:

async function GetEditModalHTML(productPriceGroupID) {
    const response = await fetch('/promotions/productprice/edit', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val()
        },
        body: JSON.stringify(productPriceGroupID) // 直接传递数值,不再包裹对象
    });
    
    return await response.text();
}

方法2:创建DTO类匹配前端传入的对象结构

在后端定义一个数据传输对象(DTO),用来接收前端的JSON对象:

public class ProductPriceGroupRequest
{
    public int ProductPriceGroupID { get; set; }
}

然后修改控制器方法的参数:

[HttpPost]
public async Task<IActionResult> Edit([FromBody] ProductPriceGroupRequest request)
{
    int productPriceGroupID = request.ProductPriceGroupID;
    // 后续业务逻辑...
}

两种方法均可解决绑定问题,推荐方法2,后续若需传递更多参数时扩展更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:35:20