几点:
如果您只想返回包含简单错误消息的错误响应,Web API 会为此提供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 的不同重载来执行此操作,该重载还指定了内容类型:
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,而不管客户端要求什么。