您好,我正在尝试使用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)
};
}
答案 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。