У меня есть веб-API. Я работаю над использованием структуры MVC 4 Web API. Если есть исключение, я в настоящее время бросаю новое исключение HttpResponseException. то есть:
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
Это возвращает объект клиенту, который просто {"message":"Invalid id"}
Я бы хотел получить дополнительный контроль над этим ответом на исключения, вернув более подробный объект. Что-то вроде
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
Как мне это сделать? Является лучшим способом для сериализации моего объекта ошибки и установки его в ответном сообщении?
Я также немного посмотрел на ModelStateDictionary
и придумал этот бит "взлома", но он все еще не чистый вывод:
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));
изменить
похоже, что пользовательский HttpError
- это то, что мне нужно. Это похоже на трюк, теперь, чтобы сделать его расширяемым из моего бизнес-уровня...
var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));