我想返回一个json错误消息,但是目前在fiddler中,我在json面板中看不到这个消息:
string error = "An error just happened";
JsonResult jsonResult = new JsonResult
{
Data = error,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
response = Request.CreateResponse(HttpStatusCode.BadRequest, jsonResult.Data);
如何做到这一点?
6条答案
按热度按时间ffvjumwh1#
有几点:
如果您只想返回一个包含简单错误消息的错误响应,那么Web API提供了一个
CreateErrorResponse
方法。这将导致以下HTTP响应(为简洁起见,省略了其他头):
如果你想返回一个自定义的对象,那么你可以像之前那样使用
Request.CreateResponse
,但是不要使用MVCJsonResult
,而是直接将你的对象传递给CreateResponse
:现在,假设您正在执行此操作,但没有从服务器获取JSON,那么需要注意的是,Web API通常使用内容类型协商来确定返回响应时使用的格式,这意味着它会查看客户端随请求发送的
Accept
标头,例如,如果Accept
标头包含application/xml
,那么Web API将返回XML。如果头包含application/json
,那么它将返回JSON。因此,您应该检查您的客户端是否发送了正确的Accept
头。也就是说,如果你真的想要的话,有一些方法可以强制Web API总是以特定的格式返回数据。你可以在方法级别使用
CreateResponse
的不同重载来实现这一点,CreateResponse
还指定了内容类型:或者,可以在
WebApiConfig
文件中将XML格式化程序从配置中完全删除:这将迫使API始终使用JSON,而不管客户端要求什么。
2exbekwf2#
你可以像下面这样返回JSON
我建议在你的方法返回类型上使用IHttpActionResult而不是HttpResponseMessage,如果你的API的方法返回类型是IHttpActionResult的话。
您还可以查看有关error returning最佳实践的链接,特别是@丹尼尔Little的回答非常有用。
我知道答案加得太晚了,但也许有人会有好处。
qyyhg6bp3#
JsonResult是一个MVC概念,它在Web API中不起作用,显式返回json内容的一种方法是使用我在这个答案https://stackoverflow.com/a/20504951/6819中创建的类
4xy9mtcn4#
添加配置格式设置程序.删除(配置格式设置程序.XmlFormatter); WebApiConfig文件中的行
lmyy7pcs5#
我想这会对你或其他人有帮助。
定义自定义ApiController
定义自定义消息结果类
使用自定义响应方法
带有自定义头错误状态码的响应数据
niknxzdl6#
可以通过Response属性直接设置当前HTTP响应的状态码
字符串