POST-запрос почтальона Привязка модели не работает со свойством IFormfile - PullRequest
1 голос
/ 07 апреля 2020

У меня есть такая модель.

    public class ClientDto
    {
       public string FirstName { get; set; }
       public string LastName { get; set; }
       public string PhoneNumber { get; set; }
       public string Address { get; set; }
       public IFormFile ProfilePicture { get; set; }
     }

И API-контроллер вроде этого:

    [HttpPost]
    public async Task<OperationResult> Post([FromForm] ClientDto c)
    {
        ImageHandler handler = new ImageHandler(env);
        Client client = new Client()
        {
            Address = c.Address,
            FirstName = c.FirstName,
            LastName = c.LastName,
            PhoneNumber = c.PhoneNumber,
            PhotoPath = await handler.UploadFile(c.ProfilePicture)
        };
        return await clientRepository.AddClient(client);
    }

Теперь, если я сделаю запрос Post с почтальоном после включения файла с ProfilePicture в качестве ключа (под Почтальон >> Тело >> раздел данных формы ), привязка модели работает, как ожидалось. Контроллер API получает PofilePicture и остальные свойства null. Но если я включу json строку для других свойств, подобных этой ( в разделе Почтальон >> Тело >> raw раздел)

    {
     "c":{
          "FirstName": "XYZ",
          "LastName":"ABX"
         }
    }

ИЛИ

     {
          "FirstName": "XYZ",
          "LastName":"ABX"
     }

модель привязка больше не работает. Как мне ударить контроллер API с почтальоном, если я хочу предоставить все свойства?

1 Ответ

1 голос
/ 07 апреля 2020

Вы смешиваете данные, отправляемые в контроллер - это запутано.

В вашем запросе с изображением тип содержимого multipart/form-data, поскольку тело содержит файл и, возможно, другие поля данных формы. В запросе с JSON тип содержимого - application/json, и вы не отправляете никаких файловых данных.

Вы должны решить, отправлять только JSON или данные формы.

В этом случае, так как вы отправляете файл, вам нужно использовать multipart/form-data и просто установить пропущенные поля в полях формы из Почтальона ( смотрите, как установить параметры данных формы Почтальона здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...