0

post 메서드가 있는데 School 매개 변수는 호출 될 때마다 항상 null입니다. 내가 맞은 데이터를 보낼 수 있는지 확인, 나는 우편 배달부를 사용하고 있지만, 내가 중단 점을 검사 할 때, 나는 null 객체를 얻는다.내 게시물 메서드가 보낸 데이터를받지 못하는 이유는 무엇입니까?

은 내가 우체부로 보내기 :

{ 
    "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을 사용하는 것입니다. 그러나이 경우에는 하나의 속성 만 있기 때문에 다음과 같이 사용하면됩니다.

관련 문제