访问在ASP.NET中没有值的查询字符串参数
我正在尝试设置一个有两个行为的页面。 我用URL分隔它们:一个行为通过/some-controller/some-action
,另一个是via /some-controller/some-action?customize
。
看起来,Request.QueryString对象不包含任何东西,当我访问第二个URL时…我的意思是,密钥集合中有一个元素,但它是null
,而不是'customize'
。 任何人对此有任何想法或如何启用此function。 我想避免不惜一切代价手动解析查询字符串:)。
由于Request.QueryString["customize"]
和Request.QueryString["foo"]
都为null
ASP.NET不支持确定是否存在没有值的查询字符串参数。 您要么自己解析它,要么指定一个值,例如?customize=1
无钥匙参数
John Sherman的回答只是技术上的正确。 不支持不带值的查询参数,但支持不带键的查询值。
换句话说, "/some-controller/some-action?customize"
被认为是具有一个查询参数的URL,其值为"customize"
,并且没有键(即,键为null
)。
检索
要检索所有此类查询参数,请使用Request.QueryString.GetValues(null)
将它们作为字符串数组检索,或者可以使用Request.QueryString[null]
将它们作为单个逗号分隔的字符串。
空参数
一个空参数(如"?foo=bar&&spam=eggs"
)将显示为string.Empty
的值,其键为null
,尾随"&"
。
例如,相当不寻常的查询字符串"?&"
将显示为string.Empty
两个值,两者都具有null
键。
空查询字符串
有一个边缘表壳不适合图案。 这是empy但现在的查询字符串(例如“/ some-controller / some-action?”)。 根据之前显示的模式,它将有一个值,即string.Empty
,键为null
。 但是,实际上它没有价值。
其他查询参数信息
虽然不是这个问题的直接部分,但这些附加信息也可能有用。
分离器角色
ASP.NET不支持由';'
分隔的查询参数 其中W3C 建议服务器支持作为'&'
的替代。
以“=”开头的参数
以'='
开头的查询参数被认为具有键,即string.Empty
。 不要将它与null
键混淆。 例如"/some-controller/some-action?=baz"
有一个值,其键是string.Empty
,其值是baz
。
超过一个“=”字符
如果有多个'='
字符,则键是第一个'='
之前的所有内容,并且值在其后的所有内容中。
例如, "/some-controller/some-action?foo=bar=baz"
有一个参数,其键为"foo"
,值为bar=baz
。
另一个例子"/some-controller/some-action?eggs==spam"
有一个带有"eggs"
键的参数,值为"=spam"
。
同名的多个参数
同样支持多个同名参数,如我的其他答案中所暗示的那样。
例如,如果URL是"/some-controller/some-action?foo=bar&foo=baz"
,那么Request.QueryString["foo"]
是“bar,baz”。
如果你想单独使用每个字符串,请使用Response.QueryString.GetValues("foo")
,它返回一个字符串数组。
例
以下高度难以理解的URL将被视为具有六个参数:
"/some-controller/some-action?=baz&foo=bar&edit&spam=eggs=ham&==&"
他们是:
+--------------+--------------+ | Key | Value | +--------------+--------------+ | string.Empty | "baz" | | "foo" | "bar" | | null | "edit" | | "spam" | "eggs=ham" | | string.Empty | "=" | | null | string.Empty | +--------------+--------------+
您可以测试Request.Url.Query
的值,如果?customise
是您正在寻找的唯一想法。
- ASP.Net Core MVC – 自定义属性的客户端validation
- 如何在C#中获取目录大小(目录中的文件)?
- 从类属性获取绑定值,DefaultBindingProperty对我不起作用!
- CLR会处理CLS-Complaint和非CLS投诉例外吗?
- 如何使用c#在Dailymotion上传video? 有人有完整的代码吗?
- 找不到类型或命名空间名称“ObservableCollection”
- asp.net缓存multithreading锁定webparts
- ASP.NET DropDownList AutoPostback不工作 – 我缺少什么?
- 从自定义AdditionalMetadataAttribute访问模型类实例(asp.net mvc 5)