Asp.net api 服务器端点接收请求正文为 null (dotnet 8)

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

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

reactjs asp.net .net api null
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.