Почтальон отправляет как данные в формате json, так и изображение

#c# #asp.net-core #.net-core #asp.net-web-api #postman

Вопрос:

Я создал один API, и он добавляет данные в базу данных со значениями и изображением.

В postman я вызываю это и устанавливаю изображение в форме-данные и другие значения в формате raw в JSON, но все равно в изображении я получаю нулевое значение в объекте исходного кода. Ниже приведены скриншоты.

Мне нужна помощь в двух вещах :

  1. Почему я получаю нулевое значение изображения в исходном коде, пожалуйста, проверьте ниже изображение.
  2. Как я могу отправить изображение и данные с помощью почтальона, проверьте скриншоты ниже, все ли в порядке с тем, что я пробовал ?

Первый снимок экрана-почтальон, на котором я отправляю данные в формате json :

введите описание изображения здесь

Второй снимок экрана с почтальоном, на котором я отправляю изображение в том же запросе в почтальоне

введите описание изображения здесь

Теперь на третьем изображении вы можете видеть, что на изображении вместо значений отображается значение Null.

введите описание изображения здесь

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

 public async Tasklt;intgt; Create(UserPreference _object) {  if(_object.Image != null)  {  var webRootPath = hostingEnv.WebRootPath;  var fileName = Path.GetFileName(_object.Image.FileName);  var filePath = Path.Combine(hostingEnv.WebRootPath, "images\User", fileName);   using(var fileStream = new FileStream(filePath, FileMode.Create))  {  await _object.Image.CopyToAsync(fileStream);  }   _object.ImagePath = filePath;  }    var obj = await applicationDbContext.UserPreferences.AddAsync(_object);  return applicationDbContext.SaveChanges(); }  

введите описание изображения здесь

 [HttpPost] [Route("CreateUserPreference")] public async Tasklt;ActionResultgt; CreateUserPreference([FromBody] UserPreference userPreference) {  if (ModelState.IsValid)  {  try  {  var userPreferenceId = await _userPreference.Create(userPreference);  if (userPreferenceId gt; 0)  return Ok("User Preference has added");  }  catch(Exception)  {  return BadRequest();  }  }  return BadRequest(); }    [Display(Name = "Name")]  public string Name { get; set; } = "";   [Display(Name = "Location")]  public string Location { get; set; } = "";   [Display(Name = "Date of Birth")]  public DateTime DateOfBirth { get; set; }   [Display(Name = "About Me")]  public string AboutMe { get; set; } = "";   [Display(Name = "Match Preference")]  public string MatchPreference { get; set; } = "";   [Display(Name = "Play Score")]  public string PlayScore { get; set; } = "";   [Display(Name = "Location")]  public string LocationPreference { get; set; } = "";   [Display(Name = "CreatedOn"), DataType(DataType.Date)]  public DateTime CreatedOn { get; set; } = DateTime.Now;   [Display(Name ="Upload Photo")]  public string ImagePath { get; set; } = "";    [NotMapped]  public IFormFile Image { get; set; }   [ForeignKey("User")]  public int UserId { get; set; }  public virtual User User { get; set; }  

Комментарии:

1. Привет, он отправил фотографию почтальону на втором изображении, которое вы прикрепили? Еще один вопрос, который у меня есть, заключается в том, правильно ли вы определили свой класс для полученных данных?

Ответ №1:

введите описание изображения здесьВы не можете отправить данные формы и текст JSON одновременно, чтобы решить вашу проблему, отправьте изображение и другую информацию в качестве даты формы Для получения более подробной информации см. скриншот

Ответ №2:

Чтобы отправить изображение и данные с помощью почтальона, вы должны использовать тип содержимого форма-данные.

Выберите тело =gt; форма-данные. Клавиша столбца имеет селектор. Для файла выберите тип файла и выберите файл. Чтобы отправить данные в одно и то же время, вам придется разделить ваш json в паре ключ-значение.

И удалите атрибут [FromBody] из действия. Он используется только для типа содержимого: приложение/json, но для вашего типа содержимого: составные/данные формы;

Комментарии:

1. Я пробовал таким образом, но все равно получаю ошибку «заголовок»: «Неподдерживаемый тип носителя».,

2. @Nic Можете ли вы, пожалуйста, опубликовать фотографию вкладки «Данные формы» почтальона? Вам не нужно заполнять все ключи для теста . пары было бы достаточно

3. Я добавил скриншот в конце вопроса.. вы можете это проверить.

4. @Nic Спасибо, но он вызывает действие CreateUserPreference, а не Create. Можете ли вы опубликовать его, пожалуйста? Заголовка было бы достаточно

5. Я добавил этот метод..пожалуйста, проверьте его

Ответ №3:

Почтальон не позволяет вам отправлять два разных типа форм одновременно таким образом. В вашем вопросе речь идет либо об отправке полезной нагрузки JSON, либо о двоичном содержимом вашего изображения.

Поэтому вместо этого добавьте файл и полезную нагрузку JSON на экран данных формы, как это:

введите описание изображения здесь

Почтальон автоматически установит Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW заголовок, а затем обработает фактическое тело следующим образом:

 ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="image"; filename="/C:/Users/xyz/Downloads/hystrix-dashboard-netflix-api-example-iPad.png" Content-Type: image/png  (data) ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="data"