Инструменты
- Visual Studio 2017
- ASP.NET Core 2.2
- Почтальон v7.2.0
Что я пытаюсь сделать
Отправка FormData из Postman на контроллер ASP.NET Core и привязка данных из запроса к классу команд, который имеет свойства с частными установщиками.
Я отправил данные JSON с использованием той же настройки (частные установщики) без проблем. Атрибут FromBody
десериализует строку JSON в модель без ошибок.
Проблема
Свойства, которые являются примитивными типами, не связываются, если модель имеет частный установщик. Однако сложные типы работают независимо от модификатора доступа.
Контроллер
[HttpPost]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
public async Task<IActionResult> CreateItemAsync([FromForm]CreateItemCommand command)
{
bool result = false;
commandResult = await _mediator.Send(command);
if (!commandResult)
{
return BadRequest();
}
return Ok();
}
Команда
Примечание. Свойство Title
оставлено для общего доступа намеренно, чтобы проиллюстрировать свойства
[DataContract]
public class CreateItemCommand
:IRequest<bool>
{
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; private set; }
[DataMember]
public int Count { get; private set; }
[DataMember]
public HashSet<string> Tags { get; private set; }
[DataMember]
public string ItemDate { get; private set; }
[DataMember]
public List<IFormFile> Documents { get; private set; }
public CreateItemCommand()
{
Skills = new HashSet<string>();
Systems = new HashSet<string>();
}
public CreateItemCommand(string title, string description,
int count, HashSet<string> tags, string itemDate,
List<IFormFile> documents)
: this()
{
Title = title;
Description = description;
Count = count
Tags = tags;
ItemDate = itemDate;
Documents = documents;
}
}
В Почтальоне я теперь настраиваю запрос следующим образом:
Мне пришлось запутать некоторую информацию, но вы можете видеть, что примитивные типы с закрытыми сеттерами не установлены.
Вопросы
- Почему модификатор доступа к свойствам влияет только на свойства с примитивными типами?
- Почему это происходит, когда атрибут параметра установлен на
FromForm
, но не когда он установлен на FromBody