EDIT:
ПРОБЛЕМА ЛОЖЬ С ЧУВСТВОМ. СМОТРИТЕ ОТВЕТ НА МОЙ СОБСТВЕННЫЙ ИСПРАВЛЕНИЕ.
В настоящее время у меня возникают некоторые проблемы с передачей списка GUID в действие контроллера с использованием HTTP POST и [FromForm]
.
Список гидов ПУСТО. Если я попытаюсь превратить его в список строк, вместо 3-х значений в списке будет отображаться только 1-е значение, и это будет строка, содержащая 3-х значений, но разделенных запятой.
Причина, по которой я использую [FromForm], заключается в том, что мне нужно загрузить файл, но ТАКЖЕ передать другие данные действию.
Я создал пример проекта, который использует swagger, когда вы используете Kestrel для отладки приложения.
Конечная точка bug
ожидает список GUID и список строк и выводит то, что вы публикуете. Когда вы публикуете 2 направляющих и 2 строки, вы должны ожидать, что они будут напечатаны. В этом случае найдены и напечатаны 0 направляющих, а также напечатана 1 строка, содержащая значения, которые вы опубликовали, но через запятую.
Конечная точка works
использует [FromBody] и работает нормально.
Вот проект: https://github.com/sander1095/FromFormGuidListBug
Для людей, которые не хотят видеть проект:
Контроллер:
[HttpPost("bug")]
public ActionResult<string> Bug([FromForm] BugModel bugModel)
{
var message = GetMessage(bugModel);
return Ok(message);
}
Модель:
public class BugModel
{
/// <summary>
/// If you send a GUID it will not appear in this list
/// </summary>
public IEnumerable<Guid> Ids { get; set; }
/// <summary>
/// If you send 3 strings, the list will contain 1 entry with the 3 string comma separated.
/// </summary>
public IEnumerable<string> IdsAsStringList { get; set; }
}
CURL звонок: curl -X POST "https://localhost:5001/api/Bug/bug" -H "accept: text/plain" -H "Content-Type: multipart/form-data" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "IdsAsStringList="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0""
РЕЗУЛЬТАТ:
Ids
пусто, в то время как IdsAsStringList
содержит 1 значение (вместо 2), то есть 2 строки, переданные в 1 значение, разделенное запятой.