我有一个新的API,我正在使用ASP.NET Core构建,我无法将任何数据POST到端点。
这是端点的样子:
[HttpPost]
[Route("StudentResults")]
public async Task<IActionResult> GetStudentResults([FromBody]List<string> userSocs, [FromBody]int collegeId)
{
var college = await _collegeService.GetCollegeByID(collegeId);
// var occupations = await _laborMarketService.GetOccupationProgramsBySocsAndCollege(userSocs, college);
return Ok();
}
这就是我通过Postman发送的有效载荷的样子:
{
"userSocs": [
"291123",
"291171",
"312021",
"291071",
"152031",
"533011"
],
"collegeId": 1
}
我确保我将邮递员设置为POST Content-Type application/json
。我究竟做错了什么?
答案 0 :(得分:37)
总是null
因为你需要将所有的post变量封装在一个对象中。像这样:
public class MyPostModel {
public List<string> userSocs {get; set;}
public int collegeId {get; set;}
}
然后
public async Task<IActionResult> GetStudentResults([FromBody] MyPostModel postModel)
答案 1 :(得分:6)
模型绑定失败的另一个原因(总是为null)是属性的数据类型不匹配。例如,这是一个简单的模型:
public class MyService {
public string JobId { get; set; }
public int ServiceType {get; set;}
}
这是一些不匹配的json:
{"JobId":1, "ServiceType":1}
当我使用jquery的.data函数检索JobId时遇到了这个问题,它会自动将其转换为int。通过改用.attr函数来修复它。
答案 2 :(得分:4)
如果模型为空,请检查:
1)数据发送到的位置:主体,形式?,并在此基础上将装饰器添加到动作中。例如:
[HttpPost]
public JsonResult SaveX([FromBody]MyVM vm) { ... }
2)检查ModelState :如果无效,则不会绑定虚拟机,因此该虚拟机为空。
if (ModelState.IsValid) { ... }
答案 3 :(得分:2)
还要确保将参数类中的那些变量声明为公共,(否则它们将一直返回为null)。
答案 4 :(得分:1)
我知道这与你的情况无关,我仍然在这里发布我的答案。我在代码中犯了一个愚蠢的错误。我刚刚复制了我的一个Get请求并将其更改为Post请求,并忘记用[FromBody]
修饰参数。如果其他人遇到同样的问题,请确保您使用[FromBody]
修改参数。
[HttpPost]
public IApiResponse Update([FromBody] User user) {
if (user == null) return new ApiBadRequestResponse(ModelState);
return _userService.Post(user) ? new ApiOkResponse(user) : new ApiResponse(500);
}
答案 5 :(得分:1)
如果您要发送两个或更多模型,则应使用此示例,这对我来说很好,祝您好运
[HttpPost]
public async Task<ActionResult> addUsuario([FromBody] Newtonsoft.Json.Linq.JObject datos)
{
Usuarios user = datos["usuario"].ToObject<Usuarios>();
Empresas empresa = datos["empresa"].ToObject<Empresas>();
return Json(await _srv.addUsuario(user, empresa));
}
答案 6 :(得分:0)
假设 [FromBody] 类由原始数据类型组成;
[FromBody]
是公开的[FromBody]
有一个空的构造函数 ()[FromBody]
是可序列化的。