use*_*007 28 c# json json.net asp.net-web-api
我想返回一个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);
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
Bri*_*ers 62
几点:
如果您要做的只是返回包含简单错误消息的错误响应,Web API会CreateErrorResponse为此提供一种方法.所以你可以简单地做:
return Request.CreateErrorResponse(HttpStatusCode.BadRequest,
"An error just happened");
Run Code Online (Sandbox Code Playgroud)
这将导致以下HTTP响应(为简洁起见,省略了其他标头):
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 36
{"Message":"An error just happened"}
Run Code Online (Sandbox Code Playgroud)
如果你想要返回一个自定义对象,那么你Request.CreateResponse就像使用一样,但不要使用MVC JsonResult.相反,只需将您的对象直接传递给CreateResponse:
var myError = new
{
Data = "An error just happened",
OtherDetails = "foo bar baz"
};
return Request.CreateResponse(HttpStatusCode.BadRequest, myError);
Run Code Online (Sandbox Code Playgroud)
现在,假设您正在执行此操作,但您没有从服务器获取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"));
Run Code Online (Sandbox Code Playgroud)
或者,您可以在WebApiConfig文件中完全从配置中删除XML格式化程序:
config.Formatters.Remove(config.Formatters.XmlFormatter);
Run Code Online (Sandbox Code Playgroud)
无论客户端要求什么,这都会强制Web API始终使用JSON.
你可以像下面那样返回JSON,
return Request.CreateResponse<ResponseApiModel>(HttpStatusCode.BadRequest, response);
Run Code Online (Sandbox Code Playgroud)
如果您的api方法返回类型是IHttpActionResult,我建议在方法返回类型上使用IHttpActionResult而不是HttpResponseMessage.你可以回报;
return Content(HttpStatusCode.InternalServerError, response);
Run Code Online (Sandbox Code Playgroud)
你也可以查看关于错误返回的最佳实践的链接特别是@Daniel Little的答案非常有用.
我知道答案很晚才增加,但也许会有人站得住.
| 归档时间: |
|
| 查看次数: |
40747 次 |
| 最近记录: |