In questo modo, ad esempio:
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);
}
}
Ciò restituirà una risposta come questa (supponendo JSON, ma lo stesso principio di base per 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."]
Ovviamente si può costruire il vostro errore oggetto/lista come preferisci, ad esempio aggiungendo nomi di campi, ID di campo ecc.
Anche se è una chiamata Ajax "a senso unico" come un POST di una nuova entità, dovresti comunque restituire qualcosa al chiamante - qualcosa che indica se la richiesta ha avuto successo. Immagina un sito in cui il tuo utente aggiungerà alcune informazioni su se stesso tramite una richiesta POST AJAX. Cosa succede se le informazioni che hanno tentato di inserire non sono valide - come faranno a sapere se la loro azione di salvataggio ha avuto esito positivo o no?
Il modo migliore per eseguire questa operazione è utilizzare Good Old HTTP Status Codes come 200 OK
e così via. In questo modo il tuo JavaScript può gestire correttamente i guasti utilizzando i callback corretti (errore, successo, ecc.).
Ecco un bel tutorial su una versione più avanzata di questo metodo, utilizzando un ActionFilter e jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
fonte
2012-07-27 11:21:17
Gli spazi dei nomi necessari per questo sono 'System.Net.Http',' System.Net' 'System.Web.Http.Controllers' e' System.Web.Http.Filters'. –
Esiste anche un'implementazione simile nella pagina ASP di Web ASP.NET ufficiale: http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web -api –
Anche se non si mette [ValidationActionFilter] sopra web api, continua a chiamare il codice e mi dà una cattiva richiesta. – micronyks