不要用Request替代Request.QueryString与 Request.Form

翅膀的初衷

发表于2014-02-17 23:41:42

前段时间因为私事休了个长假,回来发现二个项目的代码都被我们部门负责人改得面目全非,比如项目中原有的Request.QueryString,Request.Form全改成了Request不说,偶尔还不小心发现了一个Request["ID"].ToString(),大叔很忧伤,于是决定给各位筒子们与老大科普下,Request与Request.Form,Request.QueryString的区别!

Request.QueryString与Request.Form是一个NameValueCollection对象,前者是页面中GET参数的集合,后者是页面中POST数据的集合!

Request并不是一个集合,类似于Request["ID"]的代码,它会依顺序在以下几个集合中去查询数据:

1.QueryString
2.Form
3.Cookies
4.ClientCertificate
5.ServerVariables

虽然Request写起来要比Request.From与Request.QueryString更加简洁,而且根本不用考虑是POST还是GET请求,但是正常情况下我们应该避免使用Request替代Request.QueryString或者Request.Form,原因如下:

1.影响性能,Requst需要遍历多个集合

2.可能会产生无法预料的结果,比如有一个表单页面input.aspx,里面有二个值,name,mail,如果用访问input.aspx?name=user 后,提交表单,不管name填的是什么,后台通过Request["name"]取到的值永远都是user

3.存在安全隐患,在开发中,我们应该要很明确当前页面的应用场景,如果是GET,就应该用QueryString,如果是POST就用Form,想获取Cookie就用Cookies,想取服务器变量就用ServerVariables,如果统一使用Request会使造成安全隐患!