เช่นนี้:
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);
}
}
สิ่งนี้จะส่งคืนการตอบสนองเช่นนี้ (สมมติว่าเป็น JSON แต่หลักการพื้นฐานเดียวกันสำหรับ 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."]
แน่นอนคุณสามารถสร้างวัตถุ / รายการข้อผิดพลาดของคุณในแบบที่คุณต้องการตัวอย่างเช่นการเพิ่มชื่อเขตข้อมูลรหัสเขตข้อมูลเป็นต้น
แม้ว่าจะเป็นการเรียก Ajax แบบ "ทางเดียว" เหมือนโพสต์ของเอนทิตีใหม่คุณก็ยังควรส่งคืนบางอย่างให้กับผู้โทรซึ่งเป็นสิ่งที่บ่งบอกว่าคำขอนั้นสำเร็จหรือไม่ ลองนึกภาพไซต์ที่ผู้ใช้ของคุณจะเพิ่มข้อมูลเกี่ยวกับตัวเองผ่านคำขอ AJAX POST จะเกิดอะไรขึ้นหากข้อมูลที่พยายามป้อนไม่ถูกต้องพวกเขาจะรู้ได้อย่างไรว่าการดำเนินการบันทึกสำเร็จหรือไม่
วิธีที่ดีที่สุดคือการใช้รหัสสถานะ HTTP แบบเก่าที่ดีเช่น200 OK
และอื่น ๆ ด้วยวิธีนี้ JavaScript ของคุณสามารถจัดการกับความล้มเหลวได้อย่างเหมาะสมโดยใช้การเรียกกลับที่ถูกต้อง (ข้อผิดพลาดความสำเร็จ ฯลฯ )
นี่คือบทช่วยสอนที่ดีเกี่ยวกับวิธีการนี้ในเวอร์ชันขั้นสูงโดยใช้ ActionFilter และ jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http
, และSystem.Net
System.Web.Http.Controllers
System.Web.Http.Filters