Angular与Asp.Net MVC交互:如何获取前端传递的请求数据?
解决ASP.NET MVC无法接收Angular POST JSON数据的问题
这问题我之前也碰到过,核心就是前端传的是JSON格式的请求体,但后端没做对应的接收配置。直接给你上可行方案,再解释为啥之前的方法行不通:
1. 先定义匹配的模型类
首先得在ASP.NET MVC项目里建一个和前端data结构完全对应的类,让框架能自动把JSON数据绑定到对象上:
public class SubjectModel { public string Name { get; set; } public string Description { get; set; } public int TeachersCount { get; set; } public string Type { get; set; } }
注意属性名和前端的键名要对应(大小写不敏感,但尽量一致能避免不必要的坑)。
2. 修改控制器方法接收数据
把你的AddSubject方法改成下面这样:
[HttpPost] // 必须标记这个,确保只处理POST请求 public string AddSubject([FromBody] SubjectModel data) { // 现在data里就有前端传的所有属性了 // 比如直接用 data.Name、data.Description 就能拿到对应值 return "OK"; }
重点是[FromBody]这个特性——它告诉ASP.NET MVC从**请求体(Request Body)**里读取JSON数据,并自动映射到SubjectModel对象中。
为啥你之前的方法都没用?
Request.Form["data"]:这个是用来读取**表单编码(application/x-www-form-urlencoded)**数据的,但Angular的HttpClient.post默认传的是JSON(Content-Type: application/json),所以根本读不到。Request.Query["data"]:这个是读取URL里的查询参数,而你把数据放在了POST请求体里,自然找不到。public string AddSubject(object data):直接用object的话,ASP.NET MVC不知道要把JSON转换成什么具体类型,没法完成自动绑定,所以data会是null。
额外小技巧(不推荐但应急可用)
如果不想创建模型类(还是强类型更安全,能做编译时检查),也可以用JObject或者dynamic来接收:
using Newtonsoft.Json.Linq; [HttpPost] public string AddSubject([FromBody] JObject data) { string name = data["name"].ToString(); int teachersCount = (int)data["teachersCount"]; // 其他属性以此类推 return "OK"; }
内容的提问来源于stack exchange,提问作者Дмитрий Гавшин
相关产品推荐
相关产品推荐

