Request["key"]
、Request.Params["key"]
和Request.QueryString["key"]
有什么区别?
有经验的程序员使用哪种方法?为什么?
Request["key"]
、Request.Params["key"]
和Request.QueryString["key"]
有什么区别?
有经验的程序员使用哪种方法?为什么?
我建议使用Request.QueryString["key"]
。对于查询字符串,与Request["Key"]
相比,差别不大,但是如果您想从ServerVariables
获取值,则有一个更大的区别。 Request["Key"]
在QueryString
中查找值,如果为空,则查看Form
、Cookie
和最后ServerVariables
。
使用Params
是最昂贵的。对于Params
的第一次请求会创建一个新的NameValueCollection
并将QueryString
、Form
、Cookie
和ServerVariables
添加到此集合中。从第二次请求开始,它比Request["Key"]
更有效率。
话虽如此,即使是几个键的性能差异也相当微不足道。关键在于代码应该展现意图,使用Request.QueryString
可以清楚地表明您的意图。
我更倾向于使用 Request.QueryString["key"]
,因为它可以帮助代码读者确切地知道你从哪里获取数据。我不太喜欢使用Request.Params["key"]
,因为它可能涉及到cookie、查询字符串和其他一些东西,所以用户需要思考一下。减少别人理解你的代码所需的时间,就越容易维护代码。
Request.Params["key"]
就没问题。 - Will VousdenHttpRequest.Params
或者 Request.Params
从 http 请求中获取几乎所有的东西(查询字符串、表单、cookie 和会话变量),而 Request.Querystring
只会提取查询字符串... 这完全取决于你当时在做什么。
我总是明确指定集合。如果出于某种原因你想允许覆盖,为每个覆盖编写“get”代码并编写一些清晰的代码以显示你选择一个而不是另一个的层次结构。在我看来,如果没有明确的业务原因,我不喜欢从多个来源获取值。
然而,某种方式下Request.Params[“key”]仍会触发验证,就像4.0的行为一样。
这种奇怪的行为真的让我困惑了很长时间。
我总是觉得使用request.querystring来定位URL参数更加有用,这样可以避免在各种其他位置寻找它可以获取的其他值而带来的麻烦。