OK响应助手将额外的json数据返回给响应

时间:2017-08-21 12:28:28

标签: c# json asp.net-core

如何将ASP.NET Core配置为不向我的JSON响应追加/添加任何数据?目前在services.AddMvc();中配置了ConfigureServices,但除此之外没有添加自定义格式化程序。

如果我使用Ok()(或BadRequestNotFoundUnauthorized等其他帮助方法之一)从我的控制器方法返回,我会得到以下回复

代码:

[HttpGet("foo")]
public IActionResult Foo() 
{
    return Ok(Json(new { Hello = "Hi", OneMoreField = 1234}));
}

点击http://localhost:port/foo

的响应
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Mon, 21 Aug 2017 12:14:11 GMT
Server: Kestrel
Transfer-Encoding: chunked

{
    "contentType": null,
    "serializerSettings": null,
    "statusCode": null,
    "value": {
        "hello": "Hi",
        "oneMoreField": 1234
    }
}

如果我删除Ok(...)来电,只返回Json(new { Hello = "Hi", OneMoreField = 1234}),我会得到我所期望的,像这样的对象

"value": {
    "hello": "Hi",
    "oneMoreField": 1234
}

我缺少什么,是调试标志还是我没有正确切换的东西?

3 个答案:

答案 0 :(得分:3)

您什么都不丢失,但是您肯定会做额外的工作。 Json辅助函数与使用Ok相同,但强制响应为JSON格式。当您执行Ok(Json(data))时,您正在序列化JsonResult而不是data

因此,请使用:

[HttpGet("foo")]
public IActionResult Foo() 
{
    return Json(new { Hello = "Hi", OneMoreField = 1234});
}

或者:

[HttpGet("foo")]
public IActionResult Foo() 
{
    return Ok(new { Hello = "Hi", OneMoreField = 1234});
}

答案 1 :(得分:1)

您可以简单地使用Controller类方法Json(object data)

public IActionResult Foo() {
     return Json(new { Hello = "Hi", OneMoreField = 1234});
}

答案 2 :(得分:-1)

试试这个,在Content-Type之后添加dataType属性并将其设置为json:

dataType: "json",