Как отправить multipart / form-data в основной веб-интерфейс asp.net? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь отправить изображение и текстовые поля на конечный ответ API, но я получаю "Неподдерживаемый тип контента" multipart / form-data; border = --------------------------- 81801171514357 "Это веб-интерфейс ASP.NET Core 2.1.

У меня есть это:

[HttpPost("/api/account"), Authorize]
public void SaveUser(UserModel info)

И моя модель:

    [JsonProperty(PropertyName = "avatar")]
    [DataType(DataType.Upload)]
    public IFormFile Avatar { get; set; }

    [JsonProperty(PropertyName = "name")]
    [DataType(DataType.Text)]
    public string Name { get; set; }

Затем я использую axios:

    var formData = new FormData();
    formData.append("avatar", imageFile);
    formData.append("name", name);
    axios.post("/api/account", formData);

Я ожидал, что этот метод будет запущен, а не вызовет исключение.Но как?

Я пытался добавить:

[Consumes("application/json", "multipart/form-data")]

Но безуспешно ..

Тогда я попытался:

[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)

Методзапускается, но свойства пустые для информационного объекта: (

ОБНОВЛЕНИЕ: Решение, не используйте JsonProperty PropertyName. Используйте имя переменной.

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Может, стоит попробовать украсить вход контроллера и модель с атрибутом [FromForm]?См. Дополнительную информацию здесь: привязка параметров веб-API .

В данном примере действие вашего контроллера должно выглядеть следующим образом:

[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)

В модели:

[FromForm(Name="avatar")]
public IFormFile Avatar { get; set; }

[FromForm(Name="name")]
public string Name { get; set; }
0 голосов
/ 29 января 2019

Вот рабочий пример того, что вы ищете

Контроллер:

[HttpPost]
public async Task<IActionResult> SaveFile([FromForm] IFormFile file) {
  // Your code here
}

А внутри вашей модели:

public IFormFile File { get; set; }

Изменить async Task<IActionResult> еслитебе это не нужно ...

0 голосов
/ 29 января 2019

Может быть, вам стоит попробовать application/x-www-form-urlencoded вместо multipart/form-data

...