6

这是基本设置,我有一个 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"
}

但是,当使用上面的正文向此函数发送发布请求时,我在服务器控制台中返回以下错误:

“执行 ObjectResult,写入 'Microsoft.AspNetCore.Mvc.SerializableError' 类型的值”

而客户端的这个错误

{ "": ["解析值时遇到意外字符:{. Path '', line 1, position 1." ] }

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

4

2 回答 2

13

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

真正的问题是 ASP.NET Core 期望将 JSON 主体解析为对象/DTO。所以你有两个选项可以用来解决这个问题:

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

    public class SimpleObject { 
        public string Name { get; set; } 
    }
    
  2. 无需在请求正文中传递完整的 JSON 对象,只需使用简单的字符串,例如:"My parameter string"

于 2018-08-29T04:51:28.263 回答
4

您需要一个用于解析 json 数据的主体。

[FromBody] string Name

无法使用以下 json

{
    "Name": "Foo"
}

它需要一个类

public class MyClass 
{ 
    public string Name;
}

然后将其传递为

([FromBody] MyClass obj)

或者,如果它是单值,则使用 JSON 之类的

{
    [
       "Foo",
       "Foo1"
    ]
}

然后将其传递为

([FromBody] List<string> obj)
于 2018-08-29T08:02:24.123 回答