我有一个Web API,我正在使用MVC 4 Web API框架.如果有异常,我现在正在抛出一个新的HttpResponseException.即:
if (!Int32.TryParse(id, out userId))
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid id"));
Run Code Online (Sandbox Code Playgroud)
这会将对象简单地返回给客户端 {"message":"Invalid id"}
我希望通过返回更详细的对象来进一步控制对异常的响应.就像是
{
"status":-1,
"substatus":3,
"message":"Could not find user"
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?是序列化我的错误对象并在响应消息中设置它的最佳方法吗?
我也看了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));
Run Code Online (Sandbox Code Playgroud)
编辑
看起来像HttpError我需要的自定义.这似乎可以解决问题,现在可以从我的业务层扩展它...
var error = new HttpError("invalid stuff") {{"status", -1}, {"substatus", 3}};
throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));
Run Code Online (Sandbox Code Playgroud) error-handling exception-handling asp.net-mvc-4 asp.net-web-api