views:

895

answers:

5

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

Which method do you seasoned programmers use? and why?

+3  A: 

I always explicitly specify the collection. If for some reason you want to allow overrides, code the "get" for each one and write some clear code that shows your hierarchy for choosing one over the other. IMO, I dislike getting a value from multiple sources without a clear business reason for so doing.

No Refunds No Returns
+8  A: 

I prefer to use "Request.QueryString["key"]" because it helps the code-reader know exactly where you are getting the data from. I tend not to use "Request.Params["key"]" because it could refer to a cookie, query string and a few other things; so the user has to think a little. The less time someone needs to figure out what you are thinking, the easier it is to maintain the code.

Phil
I think the issue is really `where` the the data are coming from. It's fine to use `Request.Params["key"]` as long as you actually don't care whether it's coming from the query string or from somewhere else.
Will Vousden
If you know which collection the value is contained in, look there. No use making the Request object search all the collections(for performance reasons if nothing else).
DaveB
@Will Vousden. Nice point. Your point is very true when you first write the code and the idea is fresh in your head. Fast-Forward two years from now- you have a nasty bug, the code is very hairy/complex and you just want to focus on fixing the problem! Not having to do hunt for the meaning of a variable populated with "Request.Params["key"]" (query string, session variable or something else)can make things a tad easier. It is not huge or make-or-break and you can always look it up; but little things like that go a long way.
Phil
+2  A: 

HttpRequest.Params or Request.Params gets just about everything (querystring, form, cookie and session variables) from the httprequest, whereas Request.Querystring only will pull the querystring... all depends on what you are doing at the time.

curtisk
+14  A: 

I recommend Request.QueryString["key"]. There isn't a lot of difference to Request["Key"] for a query string but there is a big(er) difference if you are trying to get the value from ServerVariables. Request["Key"] looks for a value in QueryString if null, it looks at Form, then Cookie and finally ServerVariables.

Using Params is the most costly. The first request to params creates a new NameValueCollection and adds each of the QueryString, Form, Cookie and ServerVariables to this collection. For the second request on it is more performant than Request["Key"].

Having said that the performance difference for a couple of keys is fairly negligable. The key here is code should show intent and using Request.QueryString makes it clear what your intent is.

btlog
+1 for going into details and making sense.
Phil
Yes, I like this detailed answer too even though it has less votes. Thank you!
Chris
Thanks, you just answered my question as to why cookie values are popping out of my Request.Params[index].
ProfK
+1  A: 

When requesting from the QueryString, as seems implied by your questions, you should always specify such. When declaring variables, it is good practice to use the most restrictive data type that comprises all the values needed. Specificity usually leads to more readable code.

Daniel Coffman