如何在asp.net web api中返回json错误消息?

我想返回一个json errormessage但是在fiddler中,我在json面板中看不到这个:

string error = "An error just happened"; JsonResult jsonResult = new JsonResult { Data = error, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; response = Request.CreateResponse(HttpStatusCode.BadRequest, jsonResult.Data); 

这该怎么做?

几点:

如果您要做的只是返回包含简单错误消息的错误响应,Web API会CreateErrorResponse提供CreateErrorResponse方法。 所以你可以简单地做:

 return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "An error just happened"); 

这将导致以下HTTP响应(为简洁起见,省略了其他标头):

 HTTP/1.1 400 Bad Request Content-Type: application/json; charset=utf-8 Content-Length: 36 {"Message":"An error just happened"} 

如果你想要返回一个自定义对象,那么你就像使用Request.CreateResponse一样,但是不要使用MVC JsonResult 。 相反,只需将对象直接传递给CreateResponse

 var myError = new { Data = "An error just happened", OtherDetails = "foo bar baz" }; return Request.CreateResponse(HttpStatusCode.BadRequest, myError); 

现在,假设您正在执行此操作,但您没有从服务器获取JSON。 重要的是要意识到Web API通常使用内容类型协商来确定在发送响应时使用的格式。 这意味着,它会查看客户端随请求发送的Accept标头。 例如,如果Accept标头包含application/xml ,则Web API将返回XML。 如果头包含application/json那么它将返回JSON。 因此,您应该检查您的客户端是否正在发送正确的Accept标头。

也就是说,有些方法可以强制Web API始终以特定格式返回数据(如果这是您真正想要的)。 您可以通过使用CreateResponse的不同重载在方法级别执行此操作, CreateResponse也指定内容类型:

 return Request.CreateResponse(HttpStatusCode.BadRequest, myError, new System.Net.Http.Headers.MediaTypeHeaderValue("application/json")); 

或者,您可以在WebApiConfig文件中完全从配置中删除XML格式化程序:

 config.Formatters.Remove(config.Formatters.XmlFormatter); 

这将强制Web API始终使用JSON,无论客户端要求什么。

你可以像下面那样返回JSON,

  return Request.CreateResponse(HttpStatusCode.BadRequest, response); 

如果您的api方法返回类型是IHttpActionResult,我建议在方法返回类型上使用IHttpActionResult而不是HttpResponseMessage。 你可以回报;

  return Content(HttpStatusCode.InternalServerError, response); 

你也可以查看关于错误返回的最佳实践的链接特别是@Daniel Little的答案非常有用。

我知道答案很晚才增加,但也许会有人站得住。

JsonResult是一个MVC概念。 它在Web API中不起作用。 显式返回json内容的一种方法是使用我在这个答案中创建的类https://stackoverflow.com/a/20504951/6819

添加config.Formatters.Remove(config.Formatters.XmlFormatter); WebApiConfig文件中的行

您可以通过Response属性直接设置当前HTTP响应的状态代码

 Response.StatusCod = (int)HttpStatusCode.BadRequest; return Json(HttpStatusCode.BadRequest);