Request [“键”] vs Request.Params [“键”] vs Request.QueryString [“键”]


72

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

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

Answers:


121

我推荐Request.QueryString["key"]Request["Key"]查询字符串的区别不大,但是如果您尝试从中获取值,则存在较大差异ServerVariablesRequest["Key"]会在一个值QueryString如果为null,它看起来在Form,那么Cookie最后ServerVariables

使用Params是最昂贵的。到PARAMS的第一个请求创建一个新的NameValueCollection,并将每个的QueryStringFormCookieServerVariables到这个集合。对于第二个请求,它的性能要高于Request["Key"]

话虽这么说,几个键的性能差异可以忽略不计。此处的关键是代码应显示意图,使用Request.QueryString可以清楚表明您的意图。


谢谢,您刚刚回答了我的问题,为什么cookie值会从我的Request.Params [index]中弹出。
ProfK

高兴

23

我更喜欢使用Request.QueryString["key"]它,因为它可以帮助代码阅读器准确地知道从何处获取数据。我倾向于不使用Request.Params["key"]它,因为它可以引用Cookie,查询字符串和其他一些东西。因此用户必须三思。别人花更少的时间弄清楚您的想法,维护代码就越容易。


1
我认为问题确实where在于数据来自何处。它的优良使用Request.Params["key"]作为你其实并不关心它是否是一个从查询字符串来或从别的地方长。
Will Vousden

如果您知道该值包含在哪个集合中,请查看那里。使Request对象搜索所有集合是没有用的(出于性能原因,如果没有其他要求)。
DaveB

@威尔·沃登。好点。当您第一次编写代码时,您的观点是正确的,并且这个想法是新鲜的。从现在开始快进两年-您有一个令人讨厌的错误,代码非常冗长/复杂,您只想专注于解决问题!不必去寻找用“ Request.Params [“ key”]”填充的变量(查询字符串,会话变量或其他)的含义,可以使事情变得更容易。它不是巨大的或成败的,您可以随时查找。但类似的小事大有帮助。
Phil

7

HttpRequest.ParamsRequest.Params从httprequest获取几乎所有内容(查询字符串,表单,cookie和会话变量),而Request.Querystring只会提取查询字符串...一切取决于您当时在做什么。


5

我总是明确指定集合。如果出于某种原因要允许替代,请为每个替代编码“ get”,并编写一些清晰的代码以显示用于选择一个替代另一个的层次结构。IMO,我不喜欢在没有明确商业理由的情况下从多个来源获得价值。


1

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

但是,以某种方式,Request.Params [“ key”]仍将触发验证,其行为是4.0。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.