【发布时间】:2020-07-12 00:56:12
【问题描述】:
我的 POST 方法中的 [FromBody] 始终为空。
我已经在 VS2019 中使用最小的应用程序复制了它:
- 创建项目 ASP.NET Web 应用程序 (.NET Framework)
- 选择 Web API
这将使用以下方法创建一个带有 ValuesController 类的骨架项目:
public void Post([FromBody] string value)
{
}
我在“IIS Express (Google Chrome)”中运行这个项目并浏览到 https://localhost:44358/api/values,它工作正常并且 Get 方法中的断点被命中。
然后我尝试使用 cUrl 发布数据:
curl --header "Content-Type: application/json" --url https://localhost:44358/api/values --data "wibble"
断点在 VS2019 中被命中,但值为 null(我预期为“wibble”)。
我可以在请求内容中看到长度是 6,这会根据我传递给数据的字符串的长度而变化,但是读取它的调用返回空字符串,或者一个零字节[]。
this.Request.Content.ReadAsStringAsync().Result ""
this.Request.Content.Headers.ContentType {application/json}
this.Request.Content.Headers.ContentLength 6
尝试使用 HttpClient 从另一个 C# 应用程序进行 POST 也会显示相同的结果。
我错过了什么?该问题发生在默认的骨架应用程序中,并且每个人都没有抱怨它的事实表明它一定是显而易见的,但是......
更新
我在 Fiddler 中看到了同样的问题,但已经让它与 HttpClient 一起使用:
client.PostAsync<string>(url, "wibble", new JsonMediaTypeFormatter()).Result;
但以下不起作用(接收为空):
client.PostAsync(url, new StringContent("wibble", Encoding.UTF8), new JsonMediaTypeFormatter()).Result;
【问题讨论】:
-
你能分享一下使用 HttpClient 尝试 POST 的代码吗?
标签: c# curl asp.net-web-api2 dotnet-httpclient