У меня есть контроллер WebAPI, который выглядит следующим образом:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpGet]
public ActionResult<string> Get([FromQuery]DataFilter dataFilter)
{
return string.Join(Environment.NewLine, dataFilter?.Filter?.Select(f => f.ToString()) ?? Enumerable.Empty<string>());
}
}
Ничего особенного, просто контроллер, который получает некоторые данные из строки запроса и выводит их в качестве ответа.Получаемый класс выглядит следующим образом:
public class DataFilter
{
public IEnumerable<FilterType> Filter { get; set; }
}
public enum FilterType
{
One,
Two,
Three,
}
Это всего лишь примеры классов, иллюстрирующих проблему, которая является ошибкой проверки при попытке вызвать этот метод следующим образом:
/api/values?filter=
И ответ:
{
"errors": {
"Filter": [
"The value '' is invalid."
]
},
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "80000164-0002-fa00-b63f-84710c7967bb"
}
Если я установил для моего FilterType значение NULL, это работает, но в этом случае массив просто содержит нулевые значения.И если используется так:
/api/values?filter=&filter=&filter=
Он будет просто содержать 3 нулевых значения.И я хотел, чтобы он был просто пустым или нулевым, поскольку реальные значения не передаются.
Учетная запись ASP .Net Core github содержит некоторые похожие проблемы, но сообщается, что они были исправлены в 2.2, чтоя использую.Но, возможно, они разные, или я что-то не так понимаю.
EDIT_0 : Просто чтобы показать, что я имел в виду об nullable.
Если я изменю свой класс на это:
public IEnumerable<FilterType?> Filter { get; set; } //notice that nullable is added to an Enum, not the list
Затем при вызове так:
/api/values?filter=&filter=&filter=
Я получаю 3 элемента в своем свойстве «Фильтр».Все нули.Не совсем то, что я ожидаю.Хорошо, как обходной путь, но не решение вообще.