Ví dụ như thế này:
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);
}
}
Điều này sẽ trả về một phản hồi như thế này (giả sử là JSON, nhưng cùng một nguyên tắc cơ bản cho XML):
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."]
Tất nhiên, bạn có thể xây dựng đối tượng / danh sách lỗi của mình theo bất kỳ cách nào bạn muốn, ví dụ như thêm tên trường, id trường, v.v.
Ngay cả khi đó là lệnh gọi Ajax "một chiều" giống như POST của một thực thể mới, bạn vẫn nên trả lại một thứ gì đó cho người gọi - điều gì đó cho biết yêu cầu có thành công hay không. Hãy tưởng tượng một trang web mà người dùng của bạn sẽ thêm một số thông tin về họ thông qua yêu cầu AJAX POST. Điều gì sẽ xảy ra nếu thông tin họ đã cố gắng nhập không hợp lệ - làm thế nào họ biết được liệu hành động Lưu của họ có thành công hay không?
Cách tốt nhất để làm điều này là sử dụng Good Old HTTP Status Codes như 200 OK
và như vậy. Bằng cách đó, JavaScript của bạn có thể xử lý đúng các lỗi bằng cách sử dụng các lệnh gọi lại chính xác (lỗi, thành công, v.v.).
Đây là một hướng dẫn hay về phiên bản nâng cao hơn của phương pháp này, sử dụng ActionFilter và jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http
,System.Net
System.Web.Http.Controllers
, vàSystem.Web.Http.Filters
.