我搜索了一下,发现了类似的问题,但没有人将这三个问题进行比较。这让我很惊讶,所以如果有人知道,请告诉我。
有很多不同的方法可以解析请求的查询字符串…“正确”方法(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,因为它会自动解码。

08-19 17:54