为什么我的发布方法没有收到它发送的数据?
问题描述:
我有一个post方法,参数School
每次调用时都是空的。我一定要发送正确的数据,我使用Postman,但是当我用断点检查它时,我得到一个空对象。为什么我的发布方法没有收到它发送的数据?
我与邮差派:
{
"Id": "",
"Name": "Test"
}
控制器:
[HttpPost]
public IActionResult Post([FromBody] School school)
{
try
{
if (!ModelState.IsValid)
{
return BadRequest();
}
var schoolData = Mapper.Map<School, Data.School>(school);
var schoolModel = _schoolRepository.AddSchool(schoolData);
return CreatedAtRoute("GetSchool", new { id = schoolModel }, schoolModel);
}
catch (Exception e)
{
return LogException(e);
}
}
型号:
public class School
{
public Guid Id { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
public IEnumerable<Teacher> Teachers { get; set; }
public IEnumerable<Class> Classes { get; set; }
}
答
的问题是,你的模型需要Guid
和您正在发送empty string
:
"Id": ""
无论Id
不是[Required]
,模型仍然无法解析数据。但是,您可以执行的操作是将其从绑定中排除:
public IActionResult Post([FromBody][Bind(Include = nameof(School.Name))] School school)
或者,更好的选择是使用ViewModel。然而,在这种情况下,因为你只有一个属性,我只是用这个:
public IActionResult Post([FromBody]string name)
问题是''“'不是一个有效的'Guid'。如果你不想发送'Id',将它从模型绑定中排除 –
@CamiloTerevinto是的,你说的没错,我只是想,因为“Id”没有必要的属性,所以应该让它通过。你可以添加这个作为答案和恶意标记 –