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

ASP.NET Core中如何将Fetch请求体绑定到控制器Action参数

问题解决:ASP.NET Core 6 MVC 请求体绑定失败

核心问题分析

你的代码里有两个关键问题导致模型绑定失败:

  1. 模型属性访问修饰符错误:RequestSession的属性都是internal,ASP.NET Core模型绑定器默认只能访问public成员,无法读取/赋值internal属性。
  2. 序列化特性不匹配:ASP.NET Core 6默认使用System.Text.Json处理JSON序列化,但你用的是Newtonsoft.Json的[JsonProperty]特性,该特性对System.Text.Json无效,导致字段映射失败。

修复方案

1. 修改RequestSession模型

替换访问修饰符并使用正确的序列化特性:

using System.Text.Json.Serialization;

public record RequestSession
{
    [JsonPropertyName("businessUnitName")]
    public string BusinessUnitName { get; set; } = string.Empty;
    [JsonPropertyName("caption")]
    public string Caption { get; set; } = string.Empty;
    [JsonPropertyName("contactData")]
    public ContactData[]? ContactData { get; set; }
    [JsonPropertyName("customerName")]
    public string CustomerName { get; set; } = string.Empty;
    [JsonPropertyName("destination")]
    public string Destination { get; set; } = string.Empty;
    [JsonPropertyName("language")]
    public string Language { get; set; } = string.Empty;
    [JsonPropertyName("priority")]
    public int Priority { get; set; }
    [JsonPropertyName("source")]
    public string Source { get; set; } = string.Empty;
}

2. 额外检查点

  • 确保前端buildRequestSession()返回的对象字段名和模型[JsonPropertyName]指定的完全一致(System.Text.Json默认大小写敏感)。
  • 若需调试请求体,可在控制器Action中添加代码查看原始请求内容:
using var reader = new StreamReader(Request.Body);
var rawRequestBody = await reader.ReadToEndAsync();
// 输出rawRequestBody确认请求结构是否匹配

补充说明

如果你的项目确实需要使用Newtonsoft.Json而非System.Text.Json,需在Program.cs中配置替换默认序列化器:

builder.Services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
    {
        // 可添加Newtonsoft.Json的配置项
    });

这种情况下可以保留[JsonProperty]特性,但仍需将属性改为public。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:26