Asp.Net 核心对象
在Asp.Net中,我们创建的网页都是继承自System.Web.UI.Page。在Page类中有一些内置对象如Response,Rsquest对象让我们调用,那么他们是怎么来的,能干什么呢
Request
Request是HttpRequest的实例。他封装了从客户端浏览器中发送到服务器的Http请求信息。
常见的属性如下:
读取Http中信息一般用以下两种方式Request.Form[“...”]和Request.QuesyString[“...”]。Form表示以Post方式传值,QueryString表示以Get方式传过来的值。当然无论哪种方式都可以用Request[“...”],只是效率相对前两个较差一些;
Response
Response是HttpResponse的实例。他封装了服务器要返回给客户端浏览器Http响应信息。
常见的属性及方法:
Server是HttpServerUtility的实例。他提供了许多用于web请求的辅助方法
常见的属性和方法:
Server.HtmlDecode()、Server.HtmlEncode() 、Server.UrlEncode()、 Server.UrlDecode()分别对Html和Url编码及解码 其实是调用的HttpUtility类的静态方法Server.MapPath():返回与web服务器上指定虚拟路径相对应的物理文件路径
Server.Transer():内部重定向,终止当前页的执行,并使用指定的Url执行新的页.不能到重定向到外部网站
Server.Excute():将控制权交给指定的页面执行。
在请求执行链的各个阶段中,会有一个对象在各个对象间进行传递,即HttpContext。HttpContext封装了处理单个Http请求的所有信息。 Request,Response,Server是HttpContext的属性对象。
状态保持
由于Http是一种无状态的协议,每一次请求Page对象都会重新编译。如果需要上一次的页面状态就需要一些技术来保持上次的状态。
在客户端一般用:隐藏域/Cookies/ViewStete/QueryString/控件状态等来实现状态保持
在服务端一般用:Session/Application/Cache等来实现状态保持.
隐藏域:例如
protected void Page_Load(object sender, EventArgs e) { } protected void LinkButton1_Click(object sender, EventArgs e) { this.HiddenField1.Value = this.TextBox1.Text.Trim(); } protected void LinkButton2_Click(object sender, EventArgs e) { this.Label1.Text = this.HiddenField1.Value; }
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> 请输入:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">保馈?存?</asp:LinkButton> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:LinkButton ID="LinkButton2" runat="server" onclick="LinkButton2_Click">获?取?</asp:LinkButton> <asp:HiddenField ID="HiddenField1" runat="server" /> </div> </form> </body> </html>
隐藏域存在于网页的Form表单中,当页面关闭时,保存在隐藏域中的信息就会丢失.
Cookies
Cookie是HttpCookie的实例。用于服务器端与客户端的数据传输。大多数的浏览器最多只能支持4kb的大小。我们在服务端写的Cookie其实是通过Http响应报文的Set-Cookie发送的。浏览器正是通过这个来接收Cookie的。那么服务端是怎么接收浏览器端的Cookie的呢?是通过请求报文的Cookie的发送。
常用的属性及方法
Cookie.Expires():设置cookie失效时间及删除cookie
通过Cookie的Domain属性可以限制Cookie的发送域
protected void LinkButton1_Click(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("key", "value"); this.Response.Cookies.Add(cookie); } protected void LinkButton2_Click(object sender, EventArgs e) { HttpCookie cookie = this.Request.Cookies["key"]; if (cookie != null) { this.Label1.Text = cookie.Value; } }
ViewState(试图状态)
ViewState在客户端以隐藏域的形式保存数据
例如在服务器端写入 ViewState["Key"] = "Hello";
客户端就会生成一个以__VIEWSTATE为name的隐藏域,这样就可很方便的将服务器端的数据保存在到客户端中(通过隐藏域)其值value通过序列化和base64编码得到
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY2MjYyODY3NmRkFeyA4BEv7F9VRHbgAZq0GM92u03Z5culOrmvrVB4IsA=" />
ViewSate的缺点:只能用于postback;很容易生成大量的无用的html代码;一般我们都会将其禁用。控件的话使用enableviewstate=false属性,页面的话在aspx的Page指令区加上EnableViewState="false"
Session
Session提供了一种把客户端的数据保存在服务器上的方式。每组客户端的数据都会生成一个与之对应的key叫做SessionID,并将其发送给客户端。而客户端就根据这个key在服务端取得相应的数据。一般情况下SessionID以Cookie的形式保存在浏览器中,如果不能使用Cookie可将其放到Url地址中。
protected void LinkButton1_Click(object sender, EventArgs e) { Session["key"] = "value"; } protected void LinkButton2_Click(object sender, EventArgs e) { this.Label1.Text = Session["key"].ToString(); }
常用的属性和方法
Session.Abandon():销毁服务器端的Session对象
Session.Clear():清空服务端的Session对象里的键值对
Session.Timeout:设置失效时间
Session是HttpSessionState的实例,而HttpSessionState来自于SessionStateModule。在每次请求处理过程中,HttpApplication在请求管道中会检查当前请求的处 理程序是否实现了IRequiresSessionState接口。如果实现SessionStateModule将会为这个请求分配HttpSessionState。同时SessionStateModule还负责SessionID的生 成、Cookieless会话管理、从外部状态提供程序中检索回话数据以及将数据绑定到请求的调用上下文。SessionStateModule创建完SessionID之后,他会触发 Session_Start事件(Global.axax中)。
SessionStateModule并不在其内部存储会话数据。会话状态始终保存在名为“状态提供程序”的外部组件中。有三种不同的状态提供程序
1.InProc会话值在Asp.Net辅助进程中(wp.exe,w3wp.exe)的内存中保持活动对象(默认的)
2.StateServer会话值被序列化并存储在单独的进程(aspnet_state)的内存中。
3.SQLServer会话值被序列化并存储在Microsoft SQL Server表中。
参考书籍:Asp.Net 本质论