请求[“key”] vs Request.Params [“key”] vs Request.QueryString [“key”]

时间:2010-02-22 17:45:54

标签: c# asp.net request.querystring

Request["key"] vs Request.Params["key"] vs Request.QueryString["key"]

您经验丰富的程序员使用哪种方法?为什么?

5 个答案:

答案 0 :(得分:116)

我推荐Request.QueryString["key"]Request["Key"]对于查询字符串没有太大区别,但如果您尝试从ServerVariables获取值,则存在很大差异。 Request["Key"]QueryString中查找值,如果为空,则会查看Form,然后是Cookie,最后是ServerVariables

使用Params是最昂贵的。对params的第一个请求会创建一个新的NameValueCollection,并将QueryStringFormCookieServerVariables中的每一个添加到此集合中。对于第二个请求,它比Request["Key"]更高效。

说过几把钥匙的性能差异是相当可以忽视的。这里的关键是代码应该显示意图,并使用Request.QueryString清楚表明你的意图。

答案 1 :(得分:21)

我更喜欢使用Request.QueryString["key"],因为它有助于代码阅读器知道完全从哪里获取数据。我倾向于不使用Request.Params["key"],因为它可以引用cookie,查询字符串和其他一些东西;所以用户必须要思考一点。有人需要弄清楚你在想什么的时间越少,维护代码就越容易。

答案 2 :(得分:7)

HttpRequest.ParamsRequest.Params获取来自httprequest的所有内容(查询字符串,表单,cookie和会话变量),而Request.Querystring仅提取查询字符串...所有取决于什么你当时在做什么。

答案 3 :(得分:4)

我总是明确指定集合。如果由于某种原因您想要允许覆盖,请为每个覆盖代码“get”并编写一些明确的代码,以显示您的层次结构,以便选择其中一个。 IMO,我不喜欢从多个来源获取价值而没有明确的商业理由。

答案 4 :(得分:0)

请注意,如果您在web.config下设置 requestValidationMode =“4.5”,则 Request.QueryString [“key”] Request [ “key”] 将使用“延迟加载”行为作为设计。

然而,某种程度上 Request.Params [“key”] 仍然会触发4.0的行为验证。

这种奇怪的行为让我很长时间困惑。