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

Gif*_*fen 6 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}));
}
Run Code Online (Sandbox Code Playgroud)

点击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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

"value": {
    "hello": "Hi",
    "oneMoreField": 1234
}
Run Code Online (Sandbox Code Playgroud)

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

SO *_*ood 5

你并没有错过任何东西,但你肯定做了额外的工作。辅助Json函数与 using 相同Ok,但强制响应采用 JSON 格式。当你这样做时,Ok(Json(data))你正在序列化JsonResult而不是data.

因此,使用:

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

或者:

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


小智 -1

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

dataType: "json",
Run Code Online (Sandbox Code Playgroud)