Request["key"]与Request.Params["key"]与Request.QueryString["key"]有什么区别?(涉及IT技术)

75

Request["key"]Request.Params["key"]Request.QueryString["key"]有什么区别?

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

6个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
123

我建议使用Request.QueryString["key"]。对于查询字符串,与Request["Key"]相比,差别不大,但是如果您想从ServerVariables获取值,则有一个更大的区别。 Request["Key"]QueryString中查找值,如果为空,则查看FormCookie和最后ServerVariables

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

话虽如此,即使是几个键的性能差异也相当微不足道。关键在于代码应该展现意图,使用Request.QueryString可以清楚地表明您的意图。


谢谢,你刚刚解答了我的问题,解释了为什么 cookie 值会从我的 Request.Params[index] 中弹出。 - ProfK
很好,你注意到第一次调用时会创建一个新的NameValueCollection,现在我的错误和堆栈跟踪就有意义了 :) - SwissCoder

24

我更倾向于使用 Request.QueryString["key"],因为它可以帮助代码读者确切地知道你从哪里获取数据。我不太喜欢使用Request.Params["key"],因为它可能涉及到cookie、查询字符串和其他一些东西,所以用户需要思考一下。减少别人理解你的代码所需的时间,就越容易维护代码。


1
我认为问题实际上在于数据的来源。只要您确实不关心数据是来自查询字符串还是其他地方,使用Request.Params["key"]就没问题。 - Will Vousden
如果您知道值所包含的集合,请在那里查找。没有必要让请求对象搜索所有集合(出于性能原因,如果没有其他原因)。 - DaveB
@Will Vousden。不错的观点。当你第一次编写代码并且想法新鲜时,你的观点非常正确。从现在开始快进两年-你遇到了一个讨厌的错误,代码非常复杂,你只想专注于解决问题!不必寻找填充“Request.Params [“key”]”(查询字符串、会话变量或其他内容)的变量的含义可以使事情变得稍微容易一些。这不是很重要,也不会成为制约因素,你总是可以查找它;但是像这样的小事情可以走得更远。 - Phil

7

HttpRequest.Params 或者 Request.Params 从 http 请求中获取几乎所有的东西(查询字符串、表单、cookie 和会话变量),而 Request.Querystring 只会提取查询字符串... 这完全取决于你当时在做什么。


5

我总是明确指定集合。如果出于某种原因你想允许覆盖,为每个覆盖编写“get”代码并编写一些清晰的代码以显示你选择一个而不是另一个的层次结构。在我看来,如果没有明确的业务原因,我不喜欢从多个来源获取值。


1
作为一种友情提醒,如果您在web.config中设置了requestValidationMode="4.5",那么Request.QueryString[“key”]Request[“key”]都将使用设计上的“惰性加载”行为。

然而,某种方式下Request.Params[“key”]仍会触发验证,就像4.0的行为一样。

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


0

我总是觉得使用request.querystring来定位URL参数更加有用,这样可以避免在各种其他位置寻找它可以获取的其他值而带来的麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,