2016-08-27 6 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); 
    } 
} 

ここには「エラー」というサンプルレスポンスがあります。

{ 
    "message": "The request is invalid.", 
    "modelState": { 
     "row[0].Country": ["'Country' should not be empty."] 
    } 
} 

'error'レスポンスでは、 'modelState'という単語を 'error'に変更したいと思います。私は、 'ModelState'オブジェクトをコピーし、それに 'error'という名前を付けて、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

aahhh ...ありがとう! – Bill

関連する問題