Post 由 FromBody 接收导致可序列化错误
Post received by FromBody causes serializable error
这是基本设置,我有一个 asp.net 核心 webapi 控制器(在 c# 中),带有 post 函数,如下所示:
[HttpPost]
public ActionResult<string> Post([FromBody] string Name)
{
//Do some processing with the "Name" argument...
return Ok( "Success!" );
}
我正在尝试将以下原始 JSON 请求正文发送到此函数:
{
"Name": "Foo"
}
但是当使用上面的正文向此函数发送 post 请求时,我在服务器控制台中返回以下错误:
"Executing ObjectResult, writing value of type 'Microsoft.AspNetCore.Mvc.SerializableError'"
而且客户端出现这个错误
{
"": [
"Unexpected character encountered while parsing value: {. Path '', line 1, position 1."
]
}
我尝试在函数的开头设置一个断点,但它甚至没有触发!为什么我会收到可序列化错误?
serializable错误实际上是JSON.NET的解析错误,但问题实际上与解析JSON无关。
真正的问题是 ASP.NET Core 期望将 JSON 主体解析为 object/DTO。所以你有两个选项可以用来解决问题:
为您的单个参数创建一个简单的 DTO 容器对象,例如:
public class SimpleObject {
public string Name { get; set; }
}
不要在请求正文中传递完整的 JSON 对象,只需使用一个简单的字符串,例如:"My parameter string"
您需要一个要在其中解析 json 数据的正文。
[FromBody] string Name
无法与以下 json
一起使用
{
"Name": "Foo"
}
需要一个class
public class MyClass
{
public string Name;
}
然后将其作为
传递
([FromBody] MyClass obj)
或者如果是单值,就用JSON like
{
[
"Foo",
"Foo1"
]
}
然后将其作为
传递
([FromBody] List<string> obj)
这是基本设置,我有一个 asp.net 核心 webapi 控制器(在 c# 中),带有 post 函数,如下所示:
[HttpPost]
public ActionResult<string> Post([FromBody] string Name)
{
//Do some processing with the "Name" argument...
return Ok( "Success!" );
}
我正在尝试将以下原始 JSON 请求正文发送到此函数:
{
"Name": "Foo"
}
但是当使用上面的正文向此函数发送 post 请求时,我在服务器控制台中返回以下错误:
"Executing ObjectResult, writing value of type 'Microsoft.AspNetCore.Mvc.SerializableError'"
而且客户端出现这个错误
{ "": [ "Unexpected character encountered while parsing value: {. Path '', line 1, position 1." ] }
我尝试在函数的开头设置一个断点,但它甚至没有触发!为什么我会收到可序列化错误?
serializable错误实际上是JSON.NET的解析错误,但问题实际上与解析JSON无关。
真正的问题是 ASP.NET Core 期望将 JSON 主体解析为 object/DTO。所以你有两个选项可以用来解决问题:
为您的单个参数创建一个简单的 DTO 容器对象,例如:
public class SimpleObject { public string Name { get; set; } }
不要在请求正文中传递完整的 JSON 对象,只需使用一个简单的字符串,例如:
"My parameter string"
您需要一个要在其中解析 json 数据的正文。
[FromBody] string Name
无法与以下 json
一起使用{
"Name": "Foo"
}
需要一个class
public class MyClass
{
public string Name;
}
然后将其作为
传递([FromBody] MyClass obj)
或者如果是单值,就用JSON like
{
[
"Foo",
"Foo1"
]
}
然后将其作为
传递([FromBody] List<string> obj)