2016-08-27 3 views
3

.NET Web API 2.2를 사용하여 C#으로 API를 작성하고 있습니다. 요청을 확인하고 ModelState를 통해 '오류'응답을 반환합니다..NET Web API - ModelState의 오류 응답

[ResponseType(typeof(IEnumerable<CustomerModel>))] 
public IHttpActionResult Get([FromBody]List<CustomerSearchModel> row) 
{ 
    if (ModelState.IsValid) 
    { 
     CustomerLookupModel model = new CustomerLookupModel(row); 
     model.Init(); 
     model.Load(); 

     return Ok(model.Customers); 
    } 
    else 
    { 
     return BadRequest(ModelState); 
    } 
} 

다음은 샘플 '오류'응답입니다.

'error'응답에서 'modelState'라는 단어를 'error'로 변경하고 싶습니다. 나는 'ModelState'객체를 복사하고 '오류'라는 이름을 지정하여 BadRequest에 포함시킬 수 있다고 생각했습니다.

return BadRequest(error); 

그건 작동하지 않았습니다. 나는 간단한 것을 놓치고 있어야합니다.

답변

12

돌아 익명 객체 :

public HttpResponseMessage GetModelStateErrors() 
    { 

     //return Request.CreateResponse(HttpStatusCode.OK, new Product()); 

     ModelState.AddModelError("EmployeeId", "Employee Id is required."); 
     ModelState.AddModelError("EmployeeId", "Employee Id should be integer"); 
     ModelState.AddModelError("Address", "Address is required"); 
     ModelState.AddModelError("Email", "Email is required"); 
     ModelState.AddModelError("Email", "Invalid Email provided."); 

     var error = new { 
      message = "The request is invalid.", 
      error = ModelState.Values.SelectMany(e=> e.Errors.Select(er=>er.ErrorMessage)) 
     }; 

     return Request.CreateResponse(HttpStatusCode.BadRequest, error); 
    } 

피들러 출력 :

enter image description here

+0

안녕하세요 ... 난 당신의 대답을 이해하지 않습니다. ModelState는 사전입니다. 나는이 접근법을 사용하여 끝냈다 - http://www.khalidabuhakmeh.com/a-better-validation-result-for-asp-net-webapi – Bill

+0

미안하지만, 나는 익명의 물건을 돌려 주려했다. Dint는 실제로 그 코드를 사용하려고했는데, 나쁘다. 코드를 업데이트했습니다. – Developer

+0

아아 ... 고마워! – Bill

관련 문제