使用 dotnet 8、Asp.net Core 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
,它将自动解析。但请确保您提供有效的可解析输入,否则将会失败。