Ho un'API Web su cui sto lavorando utilizzando il framework API Web MVC 4. Se c'è un'eccezione, sto attualmente lanciando una nuova HttpResponseException. vale a dire:Restituisce gli oggetti di errore personalizzati nell'API Web
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
Ciò restituisce un oggetto al client che è semplicemente {"message":"Invalid id"}
vorrei ottenere ulteriori controllo su questa risposta alle eccezioni restituendo un oggetto più dettagliata. Qualcosa come
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
Come potrei fare? Il modo migliore per serializzare il mio oggetto di errore e impostarlo nel messaggio di risposta?
Ho anche esaminato la ModelStateDictionary
un po 'e sono venuti con questo po' di un "hack", ma non è ancora una potenza pulita:
var msd = new ModelStateDictionary();
msd.AddModelError("status", "-1");
msd.AddModelError("substatus", "3");
msd.AddModelError("message", "invalid stuff");
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, msd));
modificare
sembra un personalizzato HttpError
è quello che mi serve. Questo sembra fare il trucco, ora per rendere estensibile dal mio livello di business ...
var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));
Perché stai nascondendo la proprietà Messaggio? Non sarebbe più sicuro chiamare il tecnico di base e trasmettere il messaggio in questo modo? – Andy