Bunun gibi, örneğin:
public HttpResponseMessage Post(Person person)
{
if (ModelState.IsValid)
{
PersonDB.Add(person);
return Request.CreateResponse(HttpStatusCode.Created, person);
}
else
{
// the code below should probably be refactored into a GetModelErrors
// method on your BaseApiController or something like that
var errors = new List<string>();
foreach (var state in ModelState)
{
foreach (var error in state.Value.Errors)
{
errors.Add(error.ErrorMessage);
}
}
return Request.CreateResponse(HttpStatusCode.Forbidden, errors);
}
}
Bu, şöyle bir yanıt döndürür (JSON varsayılır, ancak XML için aynı temel ilke):
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
(some headers removed here)
["A value is required.","The field First is required.","Some custom errorm essage."]
Elbette, hata nesnenizi / listenizi istediğiniz gibi oluşturabilirsiniz, örneğin alan adları, alan kimlikleri vb. Eklemek.
Yeni bir varlığın POST'u gibi "tek yönlü" bir Ajax çağrısı olsa bile, arayana yine de bir şey göndermelisiniz - isteğin başarılı olup olmadığını gösteren bir şey. Kullanıcınızın bir AJAX POST isteği aracılığıyla kendileri hakkında bazı bilgiler ekleyeceği bir site hayal edin. Ya girmeye çalıştıkları bilgiler geçerli değilse - Kaydet eylemlerinin başarılı olup olmadığını nasıl anlayacaklar?
Bunu yapmanın en iyi yolu kullanıyor Good Old HTTP Durum Kodları gibi 200 OKvb. Bu şekilde, JavaScript'iniz doğru geri aramaları (hata, başarı vb.) Kullanarak hataları düzgün bir şekilde halledebilir.
ActionFilter ve jQuery kullanarak, bu yöntemin daha gelişmiş bir sürümüyle ilgili güzel bir öğretici: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http,System.NetSystem.Web.Http.ControllersveSystem.Web.Http.Filters.