我搜索了SO并发现了类似的问题,但没有人比较这三个问题。这让我感到惊讶,所以如果有人知道,请指出我。
有许多不同的方法可以解析请求的查询字符串...“正确”方式(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"]
会返回null吗?
(令人尴尬的基本问题,我知道)
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
答案 0 :(得分:6)
方法#1和#2真的是一样的。 (我认为.Get()
方法是为语言兼容性而提供的。)
ParseQueryString
会返回与Request.Querystring
功能相同的内容。当您拥有原始URL并且没有其他方法可以从中解析查询字符串参数时,通常会使用它。 Request.Querystring
为您做到这一点,所以在这种情况下,不需要它。
你不能放弃"suffix"
。您必须传递字符串或索引号。如果您完全不使用[]
,则会得到整个NameValueCollection
。如果你的意思是"suffix"
不是QueryString值之一,那么是;如果您拨打null
。
Request.QueryString["suffix"]
没有。您最有可能使用它的时间是您有一个外部URL并想从中解析查询字符串参数。
ParseQueryString
不处理它......也没有从Request.QueryString
直接提取值。对于ASP.NET,您通常将表单值作为控件的值来处理, 是ASP.NET通常为您处理这些内容的地方。 换句话说:永远不要信任用户输入。无论什么框架为你做什么。
我不知道(我认为没有)。但是,我认为您正在阅读的内容告诉您ParseQueryString
返回 UTF-8编码的文本 - 无论它是否在进入时都进行了编码。
再次:ParseQueryString
返回与Request.QueryString
基本相同的内容。事实上,我认为ParseQueryString
在内部用于提供Request.QueryString
。
他们会产生等价物;他们都将正确解码提交的值。如果您有网址:http://site.com/page.aspx?id=%20Hello
,则请致电Request.QueryString["id"]
,返回值为" Hello"
,因为它会自动解码。
答案 1 :(得分:2)
示例1:
string itsMeString = string.IsNullOrEmpty(Request.QueryString["itsMe"]) ? string.Empty : HttpUtillity.UrlDecode(Request.QueryString["itsMe"]);
直截了当地提出问题: