【发布时间】:2013-04-21 00:23:35
【问题描述】:
我正在使用 MVC 4 Web API 框架开发一个 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,并提出了这个“hack”,但它仍然不是一个干净的输出:
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));
【问题讨论】:
标签: asp.net-mvc-4 exception-handling error-handling asp.net-web-api