我搜索了 SO 并发现了类似的问题,但没有一个比较这三个问题。这让我很惊讶,所以如果有人知道,请指出我。
有许多不同的方法可以解析请求的查询字符串......“正确”方式(IMO)应该处理空值/缺失值,但也可以适当地解码参数值。以下哪一项是最好的方法?
方法一
string suffix = Request.QueryString.Get("suffix") ?? "DefaultSuffix";
方法2
string suffix = Request.QueryString["suffix"] ?? "DefaultSuffix";
方法三
NameValueCollection params = HttpUtility.ParseQueryString(Request.RawUrl);
string suffix = params.Get("suffix") ?? "DefaultSuffix";
方法四
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