Сообщение, полученное FromBody, вызывает сериализуемую ошибку - PullRequest
0 голосов
/ 29 августа 2018

Вот базовая настройка, у меня есть основной webapi-контроллер asp.net (в 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'"

И эта ошибка на стороне клиента

{ "": [ Msgstr "При анализе значения обнаружен неожиданный символ: {. Path '', строка 1, позиция 1." ] }

Я пытался установить точку останова в начале функции, но она даже не срабатывает! Почему я получаю сериализуемую ошибку?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вам нужно тело, в котором будут анализироваться данные json.

[FromBody] string Name

не может работать со следующими json

{
    "Name": "Foo"
}

Нужен класс

public class MyClass 
{ 
    public string Name;
}

Тогда передайте это как

([FromBody] MyClass obj)

Или, если это одно значение, используйте JSON, как

{
    [
       "Foo",
       "Foo1"
    ]
}

Тогда передайте это как

([FromBody] List<string> obj)
0 голосов
/ 29 августа 2018

Сериализуемая ошибка на самом деле является ошибкой синтаксического анализа в JSON.NET, но проблема на самом деле не имеет ничего общего с синтаксическим анализом JSON.

Реальная проблема заключается в том, что ASP.NET Core ожидает синтаксического анализа тела JSON в объект / DTO. Таким образом, у вас есть два варианта решения проблемы:

  1. Создайте простой контейнерный объект DTO для вашего единственного параметра, например ::

    public class SimpleObject { 
        public string Name { get; set; } 
    }
    
  2. Вместо того, чтобы передавать полноценный объект JSON в теле запроса, просто используйте простую строку, например: "My parameter string"

...