如何在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);
- 使用ASP Identity 2 POST到/ Token端点时始终收到’invalid_client’错误
- 指定asp.net核心1.0 WebAPI.exe应该在program.cs中为prod和dev使用的url(端口)
- mvc和webapi之间的身份validation(单独的域/应用程序)
- 是否所有Web请求都是并行执行的并且是异步处理的?
- JSON.NET反序列化属性名称转换为具有自定义ContractResolver的ExpandoObject
- ASP.NET Web API部分响应Json序列化
- WebAPI令牌颁发授权
- 访问方法’System.Web.Http.HttpConfiguration.DefaultFormatters()’失败
- WebApi + Simple Injector + OWIN