C# 如何在asp.net web api中返回json错误消息?
我想返回一条json errormessage,但目前在fiddler中,我无法在json面板中看到:C# 如何在asp.net web api中返回json错误消息?,c#,json,asp.net-web-api,json.net,C#,Json,Asp.net Web Api,Json.net,我想返回一条json errormessage,但目前在fiddler中,我无法在json面板中看到: string error = "An error just happened"; JsonResult jsonResult = new JsonResult { Data = error, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; response = Request.CreateResponse(Http
string error = "An error just happened";
JsonResult jsonResult = new JsonResult
{
Data = error,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
response = Request.CreateResponse(HttpStatusCode.BadRequest, jsonResult.Data);
如何做到这一点?JsonResult是一个MVC概念。它在Web API中不起作用。显式返回json内容的一种方法是使用我在这个答案中创建的类 如果您所要做的只是返回一个包含简单错误消息的错误响应,那么WebAPI将为此提供一个
CreateErrorResponse
方法。因此,您可以简单地执行以下操作:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest,
"An error just happened");
这将导致以下HTTP响应(为简洁起见,省略了其他标头):
如果您想返回一个自定义对象,那么可以像以前一样使用Request.CreateResponse
,但不要使用MVCJsonResult
。相反,只需将对象直接传递给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,而不管客户端要求什么。您可以通过response属性直接设置当前HTTP响应的状态代码
Response.StatusCod = (int)HttpStatusCode.BadRequest;
return Json(HttpStatusCode.BadRequest);
您可以像下面这样返回JSON
return Request.CreateResponse<ResponseApiModel>(HttpStatusCode.BadRequest, response);
您还可以查看有关最佳实践的链接,尤其是@Daniel Little的答案非常有用
我知道这个答案后来又加了一个,但也许有人对我有好处。Add
config.Formatters.Remove(config.Formatters.XmlFormatter)强>
WebApiConfig文件中的行This:new System.Net.Http.Headers.MediaTypeHeaderValue(“应用程序/json”)。谢谢。我一直在寻找的那一块。这不适合我。我得到。。“无法从“”转换为'string'@IanWarburton似乎您使用的是Request.CreateErrorResponse而不是Request.CreateResponse方法。对于'Content',返回的消息不是json格式。
return Request.CreateResponse<ResponseApiModel>(HttpStatusCode.BadRequest, response);
return Content(HttpStatusCode.InternalServerError, response);