为什么HttpResponseMessage不显示其内容?

时间:2018-11-13 08:47:51

标签: c# asp.net-core json.net httpresponse

您好,我正在尝试使用Json发送一个HttpResponseMessage对象。 即使在调试数据时看起来像是在检索json时使用Content时将其插入104部分(存在Postman个字节)中,在Content部分中还是没有数据,只有标题。

JsonResponse

{
    "version": {
        "major": 1,
        "minor": 1,
        "build": -1,
        "revision": -1,
        "majorRevision": -1,
        "minorRevision": -1
    },
    "content": {
        "headers": [
            {
                "key": "Content-Type",
                "value": [
                    "text/plain; charset=utf-8"
                ]
            } ////why no data ??
        ]
    },
    "statusCode": 200,
    "reasonPhrase": "OK",
    "headers": [],
    "requestMessage": null,
    "isSuccessStatusCode": true
}

您可以看到没有内容。我正在重复使用与早期应用程序中相同的代码,但我没有遇到这个问题。为什么内容为空?

代码

private static List<User> users = new List<User> {
    new User{ Id = 0, Age = 0, Name = "Failed"},
    new User{ Id = 12, Age = 33, Name = "Daniel"},
    new User{ Id = 13, Age = 33, Name = "Marian"},
};


[HttpGet]
[Route("/api/getusers")]
public async Task<HttpResponseMessage> GetUsers() {
    await Task.Delay(1000);
    var str = JsonConvert.SerializeObject(users);
    return new HttpResponseMessage {
        StatusCode = HttpStatusCode.OK,
        Content = new StringContent(str, Encoding.UTF8)
    };
}

1 个答案:

答案 0 :(得分:2)

ASP.NET Core不支持返回HttpResponseMessage的内置支持。如果要返回JSON,则可以使用IActionResult并让ASP.NET Core为您处理序列化。这是一个更新的示例:

public async Task<IActionResult> GetUsers() {
    await Task.Delay(1000);
    return Json(users);
}

例如,对于要允许content-negotiation的情况,此处有更多选项。这是一个支持使用OkObjectResult进行内容协商的版本:

public async Task<IActionResult> GetUsers() {
    await Task.Delay(1000);
    return Ok(users);
}

如果愿意,您甚至可以自己返回users

public async Task<List<User>> GetUsers() {
    await Task.Delay(1000);
    return users;
}

这足以让您入门-官方文档进一步说明了这些内容:Controller action return types in ASP.NET Core Web API