У меня есть метод Web API:
public List<Task> GetTasks([FromUri] TaskFilter filter)
{
}
У метода есть параметр со списком нулевых идентификаторов:
public class TaskFilter
{
public IList<int?> Assignees { get; set; }
}
Когда я это называю:
GET /tasks?assignees=null
Сервер возвращает ошибку:
{
"message":"The request is invalid.",
"modelState": {
"assignees": [ "The value 'null' is not valid for Nullable`1." ]
}
}
Он работает, только если я передаю пустую строку:
GET /tasks?assignees=
Но стандартные конвертеры строк запроса (из JQuery, Angular и т.д.) не работают с нулями таким образом.
Как заставить ASP.NET интерпретировать 'null'
как null
?
Обновление: Строка запроса может содержать несколько идентификаторов, например:
GET /tasks?assignees=1&assignees=2&assignees=null
Обновление2: JQuery преобразует нули в массив в пустые строки, а ASP.NET интерпретирует их как null. Поэтому вопрос о вызове WebAPI из Angular 1.6 ($HttpParamSerializerProvider
)
Обновление3: Я знаю об обходных решениях, но я их не прошу. Я хочу решение для конкретной проблемы:
- Это метод GET
- Метод принимает список из Uri
- Список может содержать
null
значения - Он должен быть
List<int?>
, потому что документы API генерируются автоматически, и я не хочу видеть текстовый массив как тип параметра - По умолчанию ASP.NET ожидает пустые строки для нулевых значений (
JQuery.param
работает таким образом) - Однако некоторые клиентские библиотеки (например, Angular) не преобразуют элементы массива
null
в пустые строки