【发布时间】:2018-02-17 15:37:10
【问题描述】:
我有一个简单的 HTTP POST 请求,我将它发送到使用 Kestrel 在 localhost 中运行的 ASP Core 2 应用程序。接收到的数据始终为 null,除非我使用来自另一个 C# 应用程序的 PostAsJsonAsync。
我发送的json 有这种形式:
{
"_isValid": true,
"_username": "test",
"_guid": "f3f574eb-5710-43c5-a4ff-0b75866a72a7",
"_dt": "2018-02-11T15:53:44.6161198Z",
"_ms": "IsSelected"
[...]
}
ASP 控制器有这种形式:
// POST: api/NativeClient
[HttpPost]
public async Task<IActionResult> Post([FromBody]string value)
{
[...]
1.案例:使用PostAsJsonAsync 从另一个 C# 应用发送
在一种情况下,我通过另一个使用 PostAsJsonAsync 的单独 C# 应用程序成功发送请求,如下所示:
HttpClient client = new HttpClient();
client.BaseAddress = new System.Uri("http://localhost:51022/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("/api/NativeClient/", json);
控制器接收到调用并成功填充value。
2。案例:使用 Postman 等外部 REST 客户端发送
在另一种情况下,我尝试通过另一个 REST 客户端发送请求,例如 Postman 或通过 REST client extension 的 Visual Studio Code:
POST http://localhost:51022/api/NativeClient/ HTTP/1.1
content-type: application/json; charset=utf-8
{
"_isValid": true,
"_username": "gnappo",
"_guid": "f3f574eb-5710-43c5-a4ff-0b75866a72a7",
"_dt": "2018-02-11T15:53:44.6161198Z",
"_ms": "IsSelected"
[...]
}
这里控制器接收到请求,但string value始终是null。
我试过删除[FromBody]标签,检查请求头,检查正文中的json字符串(完全相同),以及下面参考中提到的其他内容,但没有任何效果。
我错过了什么?
其他测试尝试/参考
Value are always null when doing HTTP Post requests
【问题讨论】:
标签: c# json asp.net-core http-post