清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

4.3 Request对象

在B/S结构的应用程序中,客户端要向服务器端发出请求,这些请求的信息包括客户端信息、请求的URL、请求的参数和Cookie等内容,服务器在接收到用户请求时自动将请求封装到Request对象中供开发者使用。

4.3.1 Request对象的属性

Request对象用来使服务器取得客户端浏览器的数据信息。它实际上是System.Web命名空间中的HttpRequest类的对象。当客户发出请求执行ASP.NET程序时,客户端的请求信息会包装在Request对象中,这些请求信息包括请求报头(Header)、客户端的机器信息、客户端浏览器信息、请求方法(如POST和GET)和提交的窗体信息等。

Request对象的属性和方法相当多,如表4-5所示对常用的属性进行了说明。

表4-5 Request对象的常用属性

在表4-5中列出了多个属性,下面只介绍常用的一些属性,如Browser属性、Form属性和QueryString属性等。

1.Browser属性

Browser属性获取有关正在请求的客户端的浏览器功能的信息,该属性的值是一个HttpBrowserCapabilities对象。如表4-6所示对HttpBrowserCapabilities对象的常用属性进行说明。

表4-6 HttpBrowserCapabilities对象的常用属性

【范例8】

在Web窗体中添加一个Label控件,该控件向页面输出信息,代码如下。

        <asp:Label ID="lblMessage" runat="server"></asp:Label>

在窗体页面后台的Load事件中指定Label控件的Text属性值,代码如下。

        protected void Page_Load(object sender, EventArgs e) {
            lblMessage.Text = "浏览器的类型是:" + Request.Browser.Browser + "<br>"
              + "浏览器的版本是:" + Request.Browser.Version + "<br>"
              + "浏览器的所在平台是:" + Request.Browser.Platform + "<br>"
              + "浏览器是否支持框架:" + Request.Browser.Frames + "<br>"
              + "浏览器是否支持Cookies:" + Request.Browser.Cookies + "<br>"
              + "浏览器是否支持JavaScript:" + Request.Browser.JavaScript + "<br>";
        }

运行窗体页面查看输出结果,如图4-9所示。

图4-9 Browser属性的使用

2.Form属性

Form属性可以检索发送到HTTP语法中控件的值,来实现信息的提交和处理。使用Form属性时需要注意,页面表单提交的方式要设置为POST,与GET相比较,POST可以将大量数据发送到服务器端。

【范例9】

通过Request对象的Form属性获取用户提交的表单的数据,并且判断提交的用户和密码是否为admin。实现步骤如下。

(1)创建FormDefault.aspx窗体页面,指定表单元素的method属性值为post,并在表单中添加一个3行2列的表格,第一行提供用户名输入框,第二行提供密码输入框,最后一行显示操作按钮,代码如下。

        <form id="form1" runat="server" method="post">
            <table width="100%" height="100px">
              <tr><td align="right">登录名:</td><td><asp:TextBox ID="txtName"
              runat="server"></asp:TextBox></td></tr>
              <tr><td align="right">登录密码:</td><td><asp:TextBox ID="txtPass"
              runat="server" TextMode="Password"></asp:TextBox></td></tr>
              <tr><td></td><td><asp:Button ID="btnSubmit" runat="server" Text="
              登 录" PostBackUrl="~/RequestTest/MessageDefault.aspx" /></td>
              </tr>
            </table>
        </form>

(2)创建MessageDefault.aspx窗体页面,在该页面中添加用于显示结果的Label控件。

(3)在MessageDefault.aspx.cs后台页面的Load事件中添加代码,通过Request.Form属性获取FormDefault.aspx窗体页面控件的值,并判断获取的值是否都等于admin,代码如下。

        protected void Page_Load(object sender, EventArgs e) {
            string name = Request.Form["txtName"].ToString();
            string pass = Request.Form["txtPass"].ToString();
            if (name == "admin" && pass == "admin") {
              lblLoginMessage.Text = "用户名:" + name + ",密码:" + pass + "登
              录成功。";
            } else {
              lblLoginMessage.Text = "用户名:" + name + ",密码:" + pass + "登
              录失败。";
            }
        }

(4)运行FromDefault.aspx页面并输入内容,如图4-10所示。输入内容完毕后单击【登录】按钮,如图4-11所示。

图4-10 登录页面

图4-11 登录效果

注意

通过Response对象的Redirect()方法跳转页面时,源页面保存的所有数据信息将丢失。因此,目标页面无法访问源页面提交的数据,但是可以通过其他方式(如Session对象)实现。本范例中通过Button控件的PostBackUrl属性实现页面跳转。

3.QueryString属性

QueryString属性与Form属性不同,它用于获取HTTP查询字符串变量集合。简单来说,QueryString属性用来获取以GET方式提交的表单数据。使用该属性时,可以通过键名或者索引两种方式获取,语法如下。

        Request.QueryString[0];
        Request.QueryString["key"]

【范例10】

利用范例9的页面,通过QueryString属性获取用户传入的信息。主要步骤如下。

(1)在QueryStringDefault.aspx页面中设计登录信息,为页面中的Button控件指定Click事件,而不是PostBackUrl属性。

(2)在QueryStringDefault.aspx页面的后台Load事件中添加以下代码。

        protected void btnSubmit_Click(object sender, EventArgs e) {
            Response.Redirect("MessageDefault.aspx? name=" + txtName.Text + "&
            pass=" + txtPass.Text);
        }

(3)更改MessageDefault.aspx页面的后台Load事件中的代码,通过QueryString属性的索引方式获取从页面传递的参数信息,代码如下。

        string name = Request.QueryString[0].ToString();
        string pass = Request.QueryString[1].ToString();

(4)运行QueryStringDefault.aspx窗体页面进行测试,效果不再显示。

4.Params属性

无论以哪种方式(如POST或GET)提交表单数据,如果用错(如GET方式提交表单,Form属性取值)就获取不到信息,这时可以通过Params属性获取数据。Request.Params是所有POST和GET传过来的值的集合,它依次包括Request.QueryString、Request.Form、Request.Cookies和Request.ServerVariable。基本语法如下。

        Request.Params["key"]

5.ServerVariables属性

Request对象用ServerVariables属性保存服务器端系统信息,这些信息变量包含在HTTP头部中随HTTP请求一起传送。ServerVariables的使用语法如下。

        Request.ServerVariables["服务器变量名称"]

ServerVariables属性中保存多个信息变量,表4-7列出了常用的变量名称。

表4-7 ServerVariables中保存的常用变量名称

如果要查看ServerVariables属性中保存的所有信息变量名称,可以通过foreach语句遍历,代码如下。

        foreach (string str in Request.ServerVariables.AllKeys) {
            Response.Write(str+"<Br/>");
        }

提示

除上述介绍的属性外,Request对象还会用到其他属性获取信息,如Url获取当前请求的URL地址,UserHostAddress获取客户端的IP主机地址。这些属性的使用都很简单,这里不再一一列举。

4.3.2 Request对象的方法

Request对象提供一系列的方法,但是并非所有的方法都会被用到。其中,BinaryRead()方法用来对当前输入流进行指定字节数的二进制读取。MapPath()方法将当前请求的URL中的虚拟路径映射到服务器上的物理路径。

MapPath()方法接收一个字符串类型参数,并通过传入的字符串获取相应的物理路径。例如,页面加载时获取当前目录下FormDefault.aspx页面的完整路径,代码如下。

        protected void Page_Load(object sender, EventArgs e) {
            Response.Write(Request.MapPath("FormDefault.aspx"));
        }