Список GUID пуст при передаче в модель, которая используется [FromForm] в ASP.NET Core 2.2 - PullRequest
3 голосов
/ 01 апреля 2019

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 значение, разделенное запятой.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Похоже, моя проблема связана с Swagger, а не с ASP.NET Core

Когда я выполняю следующую команду 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"" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "IdsAsStringList="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0""

Разница в том, что вместо использования
-F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0","9dfb212a-a215-4991-9452-3ddf90e21ec0"",
я использую
-F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0"" -F "Ids="9dfb212a-a215-4991-9452-3ddf90e21ec0"" (Дублировать Ids поля.)

Я создал проблему в репозитории Swagger https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1107

0 голосов
/ 01 апреля 2019

Я думаю, что ваш запрос является проблемой. При публикации списка я всегда добавляю индексы к названию каждого элемента в списке. Попробуйте изменить имя идентификатора на Ids [0] = "firstguidhere" Ids = [1] = "secondguidhere".

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