Ответ 1
Отправьте значение UULL, закодированное в URLEncoded (% 00), для любой вещи, для которой вы конкретно устанавливаете значение null. Он должен быть правильно декодирован URL.
Я разрабатываю API, который может принимать основные три типа данных в качестве значений для запроса строковых параметров: boolean
, string
и numeric
(integer
или float
). По умолчанию все извлекается из строки (я не думаю, что там есть способ), но параметры настроены с типом, чтобы я преобразовал их в нужный тип.
Теперь мне нужно начать принимать NULL в качестве значения для всех трех типов данных, но я не уверен, что это лучший способ сделать это.
Некоторые люди, кажется, не принимают значение NULL (?param
, без =
), но это не работает для меня:
true
для booleans, хотя это можно было бы изменить.string
.Итак, вот только два варианта, которые я вижу, ни один из которых не работает для меня:
"NULL"
или "~"
. Это работает для булевых элементов и чисел, но не для строк, поскольку это может быть искомое строковое значение.Кажется, что использование константы может быть моим единственным выбором и избежать проблем, которые константа может быть запрещена из строк. Но действительно ли это единственный жизнеспособный вариант? Хотелось бы, чтобы был лучший способ.: (
Изменить. У меня была другая идея, которая может работать, но я не уверен, как это будет восприниматься. Я думаю, что это определенно нарушает стандарты, и многие люди, скорее всего, не понравятся, но исправят мою проблему лучше, чем любое другое решение. В принципе, идея заключалась бы в использовании JSON, который поддерживает собственные типы данных. У меня нет этой проблемы с запросами POST, потому что они используют JSON.
Таким образом, идея заключалась бы в том, чтобы взять JSON в строке запроса, в основном позволяя альтернативную строку запроса, которая переопределяет стандартный HTTP-код. Что-то вроде: ?_json={"foo":"bar","param":null}
вместо ?foo=bar¶m=~
. Или, может быть, даже взять строку запроса целиком: ?{"foo":"bar","param":null}
.
Отправьте значение UULL, закодированное в URLEncoded (% 00), для любой вещи, для которой вы конкретно устанавливаете значение null. Он должен быть правильно декодирован URL.
или просто не отправляйте никакое значение. оставьте значение параметра запроса пустым в URL-адресе запроса на получение, например -
API URL/? Foo = & some_other_param = value
в API foo будет получен как ноль
Используйте ?isactive=#
для отправки значения NULL в ?isactive=#
запроса в конечной точке ASP.NET Web Api
Я протестировал его с использованием С# и IIS и хорошо работает, как сказал @Ariel, спасибо.
[HttpGet]
public object Query(bool? isactive = true)
{
var result = dbContext.Entities.Where(e => (isactive == null || e.IsActive.Equals(isactive.Value))).ToList();
return result;
}
С IIS и С# я отправляю это так:
?param=#