I have a web API I'm working on using the MVC 4 Web API framework. If there is an exception, I'm currently throwing a new HttpResponseException. ie:
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
This returns an object to the client that is simply {"message":"Invalid id"}
I would like to gain further control over this response to exceptions by returning a more detailed object. Something like
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
How would I go about doing this? Is the best way to serialize my error object and set it in the response message?
I've also looked into the ModelStateDictionary
a bit and have come up with this bit of a "hack", but it's still not a clean output:
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));
edit
looks like a custom HttpError
is what I need. This seems to do the trick, now to make it extensible from my business layer...
var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…