如何在HTTP查询字符串中发送NULL?

Mar*_*Roy 13 standards http

我正在开发一个API,可以接受主要的三种数据类型作为查询字符串参数的值:boolean,string&numeric(integerfloat).默认情况下,一切都被检索为一个字符串(我认为没有办法解决这个问题),但参数配置了一个类型,以便我将它们转换为正确的类型.

我现在需要开始接受NULL作为值,对于所有三种数据类型,但我不确定最好的方法是什么.

有些人似乎不接受任何值为NULL(?param,没有=),但这对我来说并不适用:

  1. 我已经接受true了布鲁因,尽管可以改变.
  2. 它作为空字符串接收,这是string数据类型的有效值.

所以,这里有两个我能看到的选项,其中没有一个对我有用:

  1. 使用常量,如"NULL""~".这适用于布尔值和数字,但不适用于字符串,因为这可能是所需的字符串值.
  2. 使用空值.再次,这可以适用于布尔值和数字,但不适用于字符串,因为这可能是所需的字符串值.

似乎使用常量可能是我唯一的选择,并避免可以从字符串中禁止常量的问题.但这真的是唯一可行的选择吗?我希望有更好的方法.:(

编辑:我只是有另一个可能有用的想法,但我不确定它是如何被感知的.我认为它肯定会违反标准,很多人很可能不喜欢它,但到目前为止,我的问题会比任何其他解决方案更好.基本上,我们的想法是使用支持本机数据类型的JSON.我对POST请求没有这个问题,因为他们正在使用JSON.

因此,我们的想法是在查询字符串中使用JSON,基本上允许使用替代查询字符串来覆盖标准HTTP字符串.像:?_json={"foo":"bar","param":null}而不是?foo=bar&param=~.或者甚至可能完全接管查询字符串:?{"foo":"bar","param":null}.

Kyl*_*lar 16

为您专门设置为null的任何事物发送URLEncoded NUL值(%00).它应该是正确的URL解码.

  • 是默认的"Unknown/Unmappable"unicode字符.你总是需要查看字节.;) (2认同)

ent*_*ast 5

或者只是不发送任何值。在您的获取请求 url 中将查询参数值留空.. 喜欢 -

API URL/?foo=&some_other_param=value

在 API foo 中将被接收为 null

  • 这是错误的。`foo` 将作为空字符串接收并导致其他数据类型出现问题,正如我在问题中概述的那样。 (9认同)
  • 否 ..取决于您的配置以及您在 API 中的处理方式 .. 尝试使用 ASP.Net 核心默认行为或 WebAPI .. (2认同)