Así, por ejemplo:
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);
}
}
Esto devolverá una respuesta como esta (asumiendo JSON, pero el mismo principio básico para 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."]
Por supuesto, puede construir su objeto / lista de error de la forma que desee, por ejemplo, agregando nombres de campo, ID de campo, etc.
Incluso si es una llamada Ajax "unidireccional" como un POST de una nueva entidad, aún debe devolver algo a la persona que llama, algo que indique si la solicitud fue exitosa o no. Imagine un sitio donde su usuario agregará información sobre sí mismo a través de una solicitud POST AJAX. ¿Qué pasa si la información que han intentado ingresar no es válida? ¿Cómo sabrán si su acción Guardar fue exitosa o no?
La mejor manera de hacerlo es usando códigos de estado HTTP buen viejo como 200 OK
y así sucesivamente. De esa manera, su JavaScript puede manejar correctamente las fallas utilizando las devoluciones de llamada correctas (error, éxito, etc.).
Aquí hay un buen tutorial sobre una versión más avanzada de este método, usando ActionFilter y jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http
,System.Net
System.Web.Http.Controllers
ySystem.Web.Http.Filters
.