ASP.NET中HTTP请求(Request)、响应(Response)以及状态管理讲解

您所在的位置:网站首页 获取响应内容是什么方法 ASP.NET中HTTP请求(Request)、响应(Response)以及状态管理讲解

ASP.NET中HTTP请求(Request)、响应(Response)以及状态管理讲解

2024-07-13 07:35| 来源: 网络整理| 查看: 265

文章目录 1. HTTP请求 Request对象1.1. Request对象常用属性和方法1.2. 获取页面间传送的值1.3. 获取客户端浏览器相关信息 2. HTTP响应 Response对象2.1. Response对象常用属性和方法2.2. 在页面中输出指定信息数据2.3. 页面跳转并传递参数 3. Server对象3.1. Server对象常用属性和方法3.2. 获取服务器的物理地址3.3. 对字符串进行编码和解码 4. 状态管理4.1. 客户端状态管理4.1.1. ViewState对象4.1.2. HiddenField控件4.1.3. Cookie对象 4.2. 服务器端状态管理4.2.1. Session对象4.2.2. Application对象

1. HTTP请求 Request对象 1.1. Request对象常用属性和方法

Request对象是HttpRequest类的一个实例, 它提供对当前页请求的访问,其中包括User-Agent、Address、Cookie、客户端证书、查询字符串等信息,用户可以使用该类来读取浏览器发送到服务器的内容。

部分常用的Request类的属性和方法

名称说明Browser属性用于请求的浏览器信息QueryString属性用于获取浏览器向服务器传递的键值对参数Cookies属性获取客户端发送的cookie集合UserHostName属性用户主机名称UserHostAddress属性用户主机IPUserAgent属性用户的访问代理Ur属性l要访问的地址MapPath(String)方法MapPath(String,String,Boolean)方法将虚拟地址转换为物理地址SaveAs将Http请求保存到磁盘

完整的Request属性和方法种类繁多,可以在这个页面详细查看:.NET HttpRequest类

例如下面的代码:

protected void Page_Load(object sender, EventArgs e){ Response.Write("客户端的信息:"); Response.Write("发出请求的主机名称:" + Request.UserHostName + ""); Response.Write("发出请求的主机IP:" + Request.UserHostAddress + ""); Response.Write("发出请求的主机的User-Agent:" + Request.UserAgent + ""); Response.Write("请求访问的地址:" + Request.Url + ""); }

结果如图所示,由于是本地访问,因此主机名称和IP显示为::1: 在这里插入图片描述

1.2. 获取页面间传送的值

在ASP.NET中,可以使用QueryString属性或者Params属性来获取页面间传送的值,它可以获取http请求中携带的键值对。例如如果请求为:

http://www.contoso.com/default.aspx?id=13408&name=FadiFakhouri

则QueryString或Params的值为

id=13408,fullname=FadiFakhouri

这时如果要根据键把值取出,则可用下面代码:

String id = Request.QueryString["id"]; String name = Request.QueryString["name"]; // 或 String id = Request.Params["id"]; String name = Request.Params["name"];

此时服务器即获取到了http请求传入的属性id和name的值

1.3. 获取客户端浏览器相关信息

在ASP.NET中,可以使用Browser属性来获取客户端浏览器相关信息,该属性返回一个HttpBrowserCapabilities对象,这个对象记录了浏览器相关的信息

例如下面的代码,通过HttpBrowserCapabilities 读取浏览器的信息:

protected void Page_Load(object sender, EventArgs e){ HttpBrowserCapabilities hbc = Request.Browser; Response.Write("客户端浏览器的信息:"); Response.Write("浏览器类型:" + hbc.Type + ""); Response.Write("浏览器名称:" + hbc.Browser + ""); Response.Write("浏览器版本:" + hbc.Version + ""); Response.Write("浏览器支持的主版本号" + hbc.MajorVersion + ""); Response.Write("浏览器支持的兼容版本号" + hbc.MinorVersion + ""); Response.Write("浏览器是否为Beta测试版本:" + hbc.Beta + ""); Response.Write("浏览器是否为爬虫程序:" + hbc.Crawler + ""); Response.Write("浏览器是否为AOL浏览器:" + hbc.AOL + ""); Response.Write("浏览器是否运行在Win16计算机上:" + hbc.Win16 + ""); Response.Write("浏览器是否运行在Win32计算机上:" + hbc.Win32 + ""); Response.Write("浏览器操作平台:" + hbc.Platform + ""); Response.Write("浏览器是否支持框架:" + hbc.Frames + ""); Response.Write("浏览器是否支持表格:" + hbc.Tables + ""); Response.Write("浏览器是否支持Cookie:" + hbc.Cookies + ""); Response.Write("浏览器是否支持VB:" + hbc.VBScript + ""); Response.Write("浏览器是否支持JavaScript:" + hbc.JavaScript + ""); Response.Write("浏览器是否支持Applets:" + hbc.JavaApplets + ""); Response.Write("浏览器是否支持ActiveX:" + hbc.ActiveXControls + ""); Response.Write("浏览器是否支持用于网络广播频道定义格式(CDF):" + hbc.CDF + " "); }

结果为: 在这里插入图片描述

2. HTTP响应 Response对象 2.1. Response对象常用属性和方法

Response对象用于将数据从服务器发送回浏览器,它允许将数据作为请求的结果发送到浏览器中,并提供有关响应的信息,另外,它还可以用来在页面中输入数据、跳转或者传递页面中的参数。

部分常用的Response类的属性和方法

名称说明Write方法将数据输出到客户端WriteFile方法将指定的文件写入HTTP内容输出流Redirect方法用于ASP.NET页面的跳转

完整的Response属性和方法种类繁多,可以在这个页面详细查看:.NET HttpResponse类

2.2. 在页面中输出指定信息数据

使用Write方法和WriteFile方法可以在.asp页面中输出数据,可以输出的数据包括:字符、字符串、字符数组、对象和文件

例如下面的代码:

protected void Page_Load(object sender, EventArgs e){ // 输出字符 char ch = 'a'; Response.Write("输出单个字符:" + ch + ""); // 输出字符串 String str = "abcd"; Response.Write("输出字符串:" + str + ""); // 输出字符数组的类型和内容 char[] chArray = {'a', 'c', 'e', 'g', 'i' }; Response.Write("输出字符数组:" + chArray + ""); Response.Write(chArray, 0, chArray.Length); Response.Write(""); // 输出对象类型 Page page = new Page(); Response.Write("输出一个对象:" + page + ""); // 输出文件路径和内容 Response.Write("输出文件:" + Server.MapPath("TextFile1.txt") + ""); Response.WriteFile(Server.MapPath("TextFile1.txt")); }

结果为: 在这里插入图片描述

2.3. 页面跳转并传递参数

ASP.NET中进行页面跳转并传递参数主要用到Response对象的Redirect方法,在进行调转时,如果有参数附加在链接中,可以使用"?“来分割页面地址和参数,如果有多个参数的话,可以用”&"来分割参数。

例如下面两个ASP页面WebForm1和WebForm2

// WebForm1.aspx ... ... // WebForm1.aspx.cs protected void Button1_Click(object sender, EventArgs e){ String name = TextBox1.Text; String sex = ""; if (RadioButton2.Checked){ sex = "女士"; } else if (RadioButton1.Checked) { sex = "先生"; } // WebForm2.aspx?name=name&sex=sex Response.Redirect("WebForm2.aspx?name=" + name + "&sex=" + sex); } // WebForm2.aspx.cs protected void Page_Load(object sender, EventArgs e){ // String name = Request.Params["name"]; // String sex = Request.Params["sex"]; String name = Request.QueryString["name"]; String sex = Request.QueryString["sex"]; Response.Write("欢迎" + name + sex + "登录本系统"); }

运行结果如下: 在这里插入图片描述

3. Server对象 3.1. Server对象常用属性和方法

Server对象定义了一个与Web服务器相关的类,提供方法和属性用于访问服务器上的资源。

它常用的属性和方法有:

名称说明MachineName属性获取服务器计算机的名称ScriptTimeout属性设置请求超时值MapPath方法将虚拟地址转换为物理地址UrlEncode方法对Url进行编码UrlDecode方法对编码后的Url进行解码 3.2. 获取服务器的物理地址

获取服务器的物理地址可以使用MapPath方法,一般写作

Server.MapPath("WebForm.aspx");

例如下面的代码:

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

运行结果如下所示,可以看到,虚拟地址WebForm1.aspx被转换为了实际的物理地址C:\Users\DELL\source\repos\WebApplication5\WebApplication5\WebForm1.aspx 在这里插入图片描述 需要注意的是,MapPath方法不接受相对路径的写法,放入MapPath的参数一定要是绝对路径

3.3. 对字符串进行编码和解码

对字符串进行编码可以使用UrlEncode方法,将要进行编码的Url传入URLEncode方法中,就可以得到一个编码后的Url地址,解码可以使用URLDecode方法,用法同理。

如下面代码

protected void Page_Load(object sender, EventArgs e){ Response.Write(Server.UrlEncode("http://WebForm1.aspx") + ""); Response.Write(Server.UrlDecode("http%3a%2f%2fWebForm1.aspx") + ""); }

结果为: 在这里插入图片描述

4. 状态管理

状态管理分为客户端和服务器端两种

其中客户端状态管理主要是将数据保存到本地的计算机上,当客户端向服务器端发送请求时,数据随之发送到服务器,客户端状态管理可以使用ViewState对象、HiddenField控件或者Cookie对象来实现。

服务器端状态管理是将数据保存到服务器上,可以使用Session对象或者Application对象实现

4.1. 客户端状态管理 4.1.1. ViewState对象

ViewState又称为视图状态,它主要用来获取并保存页面的状态信息。在ASP.NET 中,当一个表单被提交时,所有的表单值都会被清空。开启ViewState可以使得表单提交发生错误时,表单中的数据不会丢失,这样就避免了重复填写数据。

默认情况下,ViewState的所有服务器控件都是启用的,但是对于没有必要维持的页面和控件,可以灵活禁用ViewState,以降低ViewState对站点性能的影响。

禁用ViewState可以使用EnableViewState属性,禁用有两种方法:

禁用这个页面的ViewState // EnableViewState="false" 禁用单个控件的ViewState // EnableViewState="false" 4.1.2. HiddenField控件

HiddenField控件提供了一种在页面中存储信息但不显示信息的方法(隐藏)。例如,可以在HiddenField控件中存储用户首选项设置。

若要将信息放入HiddenField控件中,那么可以在两次回发之间将HiddenField控件的Value属性设置为要存储的值

4.1.3. Cookie对象

Cookie对象用于保存客户端浏览器请求的服务器页面,也可以用它存放非敏感性的用户信息,信息保存的时间可以根据用户的需要进行设置,Cookie中的数据信息是以文本的形式保存在客户端计算机中。

它常用的属性和方法

名称说明Expires属性设定Cookie变量的有效时间,默认为1000分钟,若设为0则实时删除Name属性取得Cookie变量的名称Value属性设置Cookie变量的内容值Path属性设置Cookie适用于的URLEquals方法判断指定的某个Cookie是否等于当前的CookieToString方法返回Cookie对象的一个字符串表示形式Clear方法清除所有的Cookie

例如下面的代码:

// .aspx文件 ... ... // .aspx.cs文件 protected void Button1_Click(object sender, EventArgs e){ if (TextBox1.Text == "1234" && TextBox2.Text == "1234") { if (CheckBox1.Checked) { if (Request.Cookies["username"] == null) { // 设置Cookie过期时间为30天 Response.Cookies["username"].Expires = DateTime.Now.AddDays(30); Response.Cookies["password"].Expires = DateTime.Now.AddDays(30); // 设置Cookie值 Response.Cookies["username"].Value = TextBox1.Text; Response.Cookies["password"].Value = TextBox2.Text; } } } } protected void TextBox1_TextChanged(object sender, EventArgs e){ // 判断Cookie中的用户名是否与用户输入的用户名一致,一致则自动显示用户密码 if (Request.Cookies["username"] != null) { if (Request.Cookies["username"].Value.Equals(TextBox1.Text)) { TextBox2.Text = Request.Cookies["password"].Value; } } }

效果如下所示,输入用户名1234,按回车键,浏览器会自动填充密码 在这里插入图片描述

4.2. 服务器端状态管理 4.2.1. Session对象

Session对象用来存储跨页面的变量或者对象,它中止于浏览器关闭或者超过设定的Session变量有效时间时,Session对象才会消失。

它常用的属性和方法

名称说明Contents集合用于确定Session对象的值的集合StaticObjects集合确定某对象指定属性的值集合,并检索所有静态对象的所有属性TimeOut属性设定Session对象变量的有效时间,当使用者超过有效时间没有动作Session对象就会失效。默认值为20分钟Abandon方法此方法结束当前会话,并清除会话中的所有信息Clear方法此方法清除全部的Session对象变量,但不结束会话

例如下面的代码:

// WebForm1.aspx文件 ... ... // WebForm1.aspx.cs文件 protected void Button1_Click(object sender, EventArgs e){ if (TextBox1.Text == "1234" && TextBox2.Text == "1234") { Session["username"] = TextBox1.Text; Session["time"] = DateTime.Now; Response.Redirect("WebForm2.aspx"); } } // WebForm2.aspx.cs文件 protected void Page_Load(object sender, EventArgs e){ Response.Write("欢迎" + Session["username"] + "来到本系统"); Response.Write("您的登录时间为:" + Session["time"]); }

效果如图所示,点击登录按钮之后,会跳转到第二个页面,并显示存入Session的信息: 在这里插入图片描述

4.2.2. Application对象

Application对象用于共享应用程序级的信息,即多个用户共享一个Application对象。Application对象是用于启动和管理ASP.NET应用程序的主要对象。

实际使用时,在第一个用户第一次请求.aspx页面时,就会启动ASP.NET应用程序并且创建Application对象,在应用程序没有结束之前,Application对象会一直存在

它的主要属性和方法有:

名称说明Contents集合用于确定Session对象的值的集合StaticObjects集合确定某对象指定属性的值集合,并检索所有静态对象的所有属性AllKeys属性返回全部Application对象变量名到一个字符串数组中Count属性获取Application对象变量的数量Item属性允许使用索引或Application变量名称传回内容值Add方法新增一个Application对象变量Set方法使用变量名称修改一个Application对象变量的内容Clear方法清除全部Application对象变量的内容Lock方法锁定全部Application对象变量Unlock方法解除锁定的Application对象变量Remove方法使用变量名称移除一个Application对象变量RemoveAll方法移除全部Application对象变量

例如下面的代码,通过Application对象来统计网站的访问量

// .aspx文件 ... ... // .aspx.cs文件 protected void Page_Load(object sender, EventArgs e){ Label1.Text = "网站已被访问" + Application["count"] + "次"; } // Global.asax.cs文件 protected void Application_Start(object sender, EventArgs e){ // 创建一个count用来计算访问量,初始化为0 Application["count"] = 0; } protected void Session_Start(object sender, EventArgs e){ // 访问网站时,访问量+1 Application.Lock(); Application["count"] = (int)Application["count"] + 1; Application.UnLock(); }

运行效果如下,第一次打开时显示上图,复制地址到另一个浏览器页面打开,显示下图: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3