Как отправить NULL в строку запроса HTTP?

Я разрабатываю 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&param=~. Или, может быть, даже взять строку запроса целиком: ?{"foo":"bar","param":null}.

Ответ 1

Отправьте значение UULL, закодированное в URLEncoded (% 00), для любой вещи, для которой вы конкретно устанавливаете значение null. Он должен быть правильно декодирован URL.

Ответ 2

или просто не отправляйте никакое значение. оставьте значение параметра запроса пустым в URL-адресе запроса на получение, например -

API URL/? Foo = & some_other_param = value

в API foo будет получен как ноль

Ответ 3

Используйте ?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;
}

Ответ 4

С IIS и С# я отправляю это так:

?param=#