我搜索了一下,发现了类似的问题,但没有人将这三个问题进行比较。这让我很惊讶,所以如果有人知道,请告诉我。
有很多不同的方法可以解析请求的查询字符串…“正确”方法(imo)应该处理空值/缺失值,但也应该根据需要解码参数值。以下哪一项是同时做到这两个的最佳方法?
方法1
string suffix = Request.QueryString.Get("suffix") ?? "DefaultSuffix";
方法2
string suffix = Request.QueryString["suffix"] ?? "DefaultSuffix";
方法3
NameValueCollection params = HttpUtility.ParseQueryString(Request.RawUrl);
string suffix = params.Get("suffix") ?? "DefaultSuffix";
方法4
NameValueCollection params = HttpUtility.ParseQueryString(Request.RawUrl);
string suffix = params["suffix"] ?? "DefaultSuffix";
问题:
如果没有指定后缀,则
Request.QueryString["suffix"]
返回空值吗?(我知道,这是一个令人尴尬的基本问题)
在直接访问
HttpUtility.ParseQueryString()
时,Request.QueryString
是否提供了任何额外的功能?MSDN文档列出了此警告:
The ParseQueryString method uses query strings that might contain user input, which is a potential security threat. By default, ASP.NET Web pages validate that user input does not include script or HTML elements. For more information, see Script Exploits Overview.
但我不清楚这是否意味着应该使用
ParseQueryString()
来处理这个问题,或者因为它而暴露在安全漏洞中……这是什么?ParseQueryString()
默认使用utf8编码…默认情况下,所有浏览器都用utf8编码查询字符串吗?ParseQueryString()
如果指定了多个值,则将用逗号分隔这些值…Request.QueryString()
也会这样做吗?如果不这样做呢?哪种方法可以正确地将%2b解码为“+”?
再次显示我的windows开发根…如果我对这些事情不那么好奇的话,我会成为一个更快的开发人员…P
最佳答案
方法1和方法2是一样的,真的。(我认为.Get()
方法是为了语言兼容而提供的。)ParseQueryString
返回与Request.Querystring
功能等价的内容。当您有一个原始url并且没有其他方法从中解析查询字符串参数时,通常会使用它。Request.Querystring
是为你做的,所以在这种情况下,不需要它。
不能离开。必须传递字符串或索引号。如果完全去掉"suffix"
,就得到整个[]
。如果你的意思是,如果NameValueCollection
不是查询字符串值之一,那么是的;如果调用了cc>,你会得到"suffix"
。
不。最有可能使用它的时间是如果您有一个外部url,并希望从中解析查询字符串参数。null
无法处理…也不能直接从Request.QueryString["suffix"]
中提取值。对于asp.net,您通常将表单值作为控件的值来处理,这就是asp.net通常为您“处理”这些内容的地方。换句话说:永远不要相信用户的输入。不管什么样的框架在为你做什么。
我不知道。但是,我认为你正在阅读的是告诉你,ParseQueryString
返回UTF-8编码的文本——不管它是什么时候编码的。
再次声明:Request.QueryString
返回的结果与从ParseQueryString
获得的结果基本相同。实际上,我认为ParseQueryString
是在内部用来提供Request.QueryString
。
它们将产生同等的结果;它们都将正确地解码提交的值。如果您有url:ParseQueryString
则调用Request.QueryString
返回值将是http://site.com/page.aspx?id=%20Hello
,因为它会自动解码。