2017-10-16 120 views
0

我有一个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; } 
} 
+1

问题是''“'不是一个有效的'Guid'。如果你不想发送'Id',将它从模型绑定中排除 –

+0

@CamiloTerevinto是的,你说的没错,我只是想,因为“Id”没有必要的属性,所以应该让它通过。你可以添加这个作为答案和恶意标记 –

回答

1

的问题是,你的模型需要Guid和您正在发送empty string

"Id": "" 

无论Id不是[Required],模型仍然无法解析数据。但是,您可以执行的操作是将其从绑定中排除:

public IActionResult Post([FromBody][Bind(Include = nameof(School.Name))] School school) 

或者,更好的选择是使用ViewModel。然而,在这种情况下,因为你只有一个属性,我只是用这个:

public IActionResult Post([FromBody]string name) 
相关问题