这是基本设置,我有一个asp.net核心webapi控制器(在c#中),其发布功能如下:
[HttpPost]
public ActionResult<string> Post([FromBody] string Name)
{
//Do some processing with the "Name" argument...
return Ok( "Success!" );
}
我正在尝试将以下原始JSON请求正文发送到此函数:
{
"Name": "Foo"
}
但是当使用上面的正文向该函数发送发布请求时,我在服务器控制台中返回以下错误:
“正在执行ObjectResult,写入类型为'Microsoft.AspNetCore.Mvc.SerializableError'的值”
还有在客户端出现的错误
{ “”:[ “解析值:{。Path”,第1行,位置1时遇到意外字符。” ] }
我尝试在函数的开头设置一个断点,但是它甚至不会触发!为什么会出现可序列化的错误?
答案 0 :(得分:5)
可序列化错误实际上是来自JSON.NET的解析错误,但该问题实际上与解析JSON无关。
真正的问题是ASP.NET Core希望将JSON主体解析为对象/ DTO。因此,您有两个选项可用来解决问题:
为您的单个参数创建一个简单的DTO容器对象,例如:
public class SimpleObject {
public string Name { get; set; }
}
不要在请求正文中传递完整的JSON对象,而只需使用简单的字符串即可,例如:"My parameter string"
答案 1 :(得分:2)
您需要一个用于解析json数据的正文。
[FromBody] string Name
无法使用以下json
{
"Name": "Foo"
}
需要上课
public class MyClass
{
public string Name;
}
然后将其作为
传递([FromBody] MyClass obj)
或者,如果它是单个值,则使用JSON之类的
{
[
"Foo",
"Foo1"
]
}
然后将其作为
传递([FromBody] List<string> obj)