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

如何从Angular 10+向.NET Core 6通过Http.Post提交复杂对象或对象列表?

Angular 10+ 向 .NET Core 6 提交复杂对象/列表的解决方案

核心问题

你当前的前后端数据结构完全不匹配:前端提交的是单个包含objectKey和id的JSON对象,但后端Action期望接收**List<object>类型的JSON数组**,这直接导致解析失败,用JsonObject也没法正确映射到强类型。


方案1:提交单个包含复杂对象的请求(匹配当前前端结构)

1. 后端定义对应强类型模型

先创建和前端请求体结构完全对应的C#类,属性名要和前端一致(.NET Core默认支持驼峰命名映射,也可以用JsonPropertyName显式指定):

// 若objectKey是复杂对象,需要定义对应的嵌套类
public class ComplexObject
{
    // 这里写复杂对象的所有属性,比如:
    public string Name { get; set; }
    public int Value { get; set; }
    // 其他嵌套属性...
}

// 对应前端请求体的根模型
public class RequestModel
{
    public ComplexObject ObjectKey { get; set; } // 注意属性名和前端的objectKey对应,.NET会自动处理驼峰
    public int Id { get; set; } // 若id是字符串就用string
}

2. 修改后端Action参数

把[FromBody] List<object> data改成定义好的模型类:

[HttpPost]
[Route("url")]
public IActionResult FnName([FromBody] RequestModel data)
{
    // 直接使用data.ObjectKey和data.Id即可,无需手动转换
    // DoSomething
    return Ok();
}

3. 前端代码优化(可选但推荐)

避免用any,定义对应类型,同时Angular的HttpClient默认会设置Content-Type: application/json,可以省略headers:

// 定义前端类型
interface ComplexObject {
  name: string;
  value: number;
  // 其他属性...
}

interface RequestBody {
  objectKey: ComplexObject;
  id: number;
}

postFnc(obj: ComplexObject, id: number): Observable<any> {
  const body: RequestBody = {
    objectKey: obj,
    id: id
  };
  // 无需手动设置headers,HttpClient默认会处理
  return this.http.post<any>(url, body);
}

方案2:提交复杂对象的列表(如果你的实际需求是批量提交)

1. 调整前端请求体为数组

把要提交的对象列表作为请求体:

interface ComplexObject {
  name: string;
  value: number;
}

postFnc(objList: ComplexObject[], id: number): Observable<any> {
  // 若需要携带id,也可以把数组和id包装成一个对象,或者放在url参数里
  const body = objList;
  return this.http.post<any>(url, body);
}

2. 后端接收列表类型

定义单个对象的模型后,接收List<ComplexObject>:

public class ComplexObject
{
    public string Name { get; set; }
    public int Value { get; set; }
}

[HttpPost]
[Route("url")]
public IActionResult FnName([FromBody] List<ComplexObject> data)
{
    // 直接遍历data处理每个对象
    // DoSomething
    return Ok();
}

关于JsonObject的说明

JsonObject是动态类型,虽然能接收JSON,但没法直接强转成自定义类,强类型模型不仅能自动映射,还能获得编译时检查、智能提示,避免手动转换的错误,是.NET Core处理JSON请求的标准方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:35:34