связывание модели API ядра dotnet не работает [frombody] - PullRequest
0 голосов
/ 08 апреля 2019

Я создал простое приложение .netcore 2.1, используя шаблон реагировать-редукс, где есть API, где я регистрирую пользователей.Контроллер работает следующим образом.

[HttpPost("register")]
public async Task<ActionResult<string>> Register(User user)
{
     await this._authService.Register(user);
     return Ok();
}

Когда я пытаюсь протестировать этот API с помощью контроллера, всегда атрибуты пользователя возвращаются как нулевые.Ниже приводится модель пользователя и запрос почтальона.

public class User : IEntitybase
{
    [Key]
    public string Id { get; set; }
    [Required]
    public string Name {get; set;}
    [Required]
    public string Email {get; set;}
    [Required]
    public string Password {get; set;}

}

}

enter image description here

Поскольку отправка пользователя в качестве тела сообщения не работала, я попытался отправить параметры пользователя в качестве параметров запроса,что удивительно работало, даже когда я не упомянул, чтобы получить параметры из параметров запроса.

После этого я изменил контроллер API, используя атрибут [FromBody], который все еще делает пользователя пустым, когда я отправляю атрибуты в теле.

В чем может заключаться проблема, заключающаяся в том, что по умолчанию он принимает параметры запроса, а не извлекает их из тела?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Если вы не использовали [JsonProperty (PropertyName = "FooBar")], в модели имя свойства должно соответствовать данным POST (с учетом регистра).

Следовательно, по вашему сценарию, в Почтальоне,

  1. Выберите глагол POST и введите правильный URL

  2. В теле выберите raw -> JSON (application / json)

enter image description here

  1. Затем добавьте следующее тело JSON -
{
    "Id" : "555",
    "Name" : "Some Name",
    "Email" : "EmailAddress@abc.com",
    "Password" : "Password"
}
0 голосов
/ 08 апреля 2019

Попробуйте использовать некоторый клиент API, например Почтальон .

Запрос должен быть получен Заголовок запроса должен иметь Content-Type как «application / json», это может быть что-то другое, но попробуйте это запустить. Установить тело как

{
    "Id": "123",
    "Name": "some name",
    "Email": "someaddress@server.com",
    "Password": "somepwd"
}
...