Bra*_*ler 28 c# asp.net query-string
我正在尝试设置一个有两个行为的页面.我用URL分隔它们:一个行为是通过访问/some-controller/some-action,另一个是通过/some-controller/some-action?customize.
看起来,Request.QueryString对象不包含任何东西,当我访问第二个URL时...我的意思是,密钥集合中有一个元素,但它null不是'customize'.任何人对此有任何想法或如何启用此功能.我想避免不惜一切代价手动解析查询字符串:).
Kev*_*art 71
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.但是,实际上它没有价值.
Kev*_*art 27
虽然不是这个问题的直接部分,但这些附加信息也可能有用.
ASP.NET不支持分离的查询参数';',W3C 建议服务器支持这些参数作为替代'&'.
以...开头的查询参数'='被认为具有密钥string.Empty.不要把它与一把钥匙混淆null.例如,"/some-controller/some-action?=baz"有一个值为key 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 |
+--------------+--------------+
Run Code Online (Sandbox Code Playgroud)
ASP.NET 不支持确定是否存在没有值的查询字符串参数,因为Request.QueryString["customize"]和Request.QueryString["foo"]都是null. 您要么必须自己解析它,要么指定一个值,例如?customize=1
| 归档时间: |
|
| 查看次数: |
25556 次 |
| 最近记录: |