ASP.NET Core 8 Web API 端点接收请求正文为空

问题描述 投票:0回答:1

使用 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
字段是必需的。

reactjs null asp.net-core-webapi asp.net-core-8
1个回答
0
投票

我不确定你想实现什么目标。

请求以

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
,它将自动解析。但请确保您提供有效的可解析输入,否则将会失败。

© www.soinside.com 2019 - 2024. All rights reserved.