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 (suponiendo 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 error Objeto/lista de la manera que desee, por ejemplo, agregar nombres de campo, identificador de campo, etc.
Incluso si se trata de una llamada Ajax "de una sola vía" como una POST de una nueva entidad, aún debe devolver algo a la persona que llama, algo que indica si la solicitud fue exitosa o no. Imagine un sitio donde su usuario agregará información acerca de sí mismo a través de una solicitud AJAX POST. ¿Qué ocurre si la información que intentaron ingresar no es válida? ¿Cómo sabrán si su acción de Guardar fue exitosa o no?
La mejor manera de hacerlo es usando Buenos códigos de estado de HTTP como 200 OK
y así sucesivamente. De esta forma, su JavaScript puede manejar fallas de forma adecuada utilizando las devoluciones de llamada correctas (error, éxito, etc.).
Aquí hay un buen tutorial en una versión más avanzada de este método, utilizando un ActionFilter y jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
Los espacios de nombres necesarios para esto son 'System.Net.Http',' System.Net' 'System.Web.Http.Controllers', y' System.Web.Http.Filters'. –
También hay una implementación similar en la página web oficial ASP.NET Api: http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web -api –
Incluso si no coloca [ValidationActionFilter] arriba de la API web, aún llama al código y me da una mala solicitud. – micronyks