使用 ASP.NET Core 8 Web API,我尝试设置一个带有一些端点的 API 服务器的简单玩具示例。客户端,它是一个简单的 React 应用程序,通过获取请求查询端点。我不明白为什么,但是其方法采用输入参数的
POST/PUT/PATCH
端点没有获取请求正文中的数据。它进来时为空。
对于相关方法有输入的 GET 端点,我没有这个问题。如果我将输入类型更改为动态而不是字符串,那么它就能够接收请求正文。
我尝试过的 - 服务器端点示例:
[HttpPost]
[Route("simplesubmit")]
public void SimpleSubmit([FromBody] string dataAsString)
{
// simple work
}
客户端获取示例:
await fetch ("urlgoeshere.com/simplesubmit", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
name: "my name"
})
});
发生了什么:未调用
SimpleSubmit
方法,并且网络响应为 400,表明 dataAsString
字段是必需的。
我不确定你想实现什么目标。
请求以
形式发送,但以application/json
形式接收。事情不是这样的。string
要使其以可以接收任何提交对象的方式工作,您可以使用
dynamic
:
[HttpPost]
[Route("simplesubmit")]
// Check out `dynamic` instead of `string`
public void SimpleSubmit([FromBody] dynamic data)
{
// simple work
}
但这不是最好的方法,因为它没有使用强类型 C# 的强大功能。
您最好使用自定义的类。
[HttpPost]
[Route("simplesubmit")]
// Check out the `SubmitRequest` type of the parameter
public void SimpleSubmit([FromBody] SubmitRequest data)
{
// simple work
}
// Custom class to parse JSON body from a request
public class SubmitRequest
{
public string Name { get; set; }
}
data
将从请求正文中自动解析为 SubmitRequest
类型的值。
只需在类中定义您需要的任何属性
SubmitRequest
,它将自动解析。但请确保您提供有效的可解析输入,否则将会失败。