FromBody收到的帖子导致可序列化错误

时间:2018-08-29 04:51:28

标签: c# asp.net-core asp.net-core-webapi frombodyattribute

这是基本设置,我有一个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时遇到意外字符。”       ]   }

我尝试在函数的开头设置一个断点,但是它甚至不会触发!为什么会出现可序列化的错误?

2 个答案:

答案 0 :(得分:5)

可序列化错误实际上是来自JSON.NET的解析错误,但该问题实际上与解析JSON无关。

真正的问题是ASP.NET Core希望将JSON主体解析为对象/ DTO。因此,您有两个选项可用来解决问题:

  1. 为您的单个参数创建一个简单的DTO容器对象,例如:

    public class SimpleObject { 
        public string Name { get; set; } 
    }
    
  2. 不要在请求正文中传递完整的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)