Asp.Net 核心对象

Asp.Net中,我们创建的网页都是继承自System.Web.UI.Page。在Page类中有一些内置对象如Response,Rsquest对象让我们调用,那么他们是怎么来的,能干什么呢

Request

RequestHttpRequest的实例。他封装了从客户端浏览器中发送到服务器的Http请求信息。

常见的属性如下:

读取Http中信息一般用以下两种方式Request.Form[...]Request.QuesyString[...]Form表示以Post方式传值,QueryString表示以Get方式传过来的值。当然无论哪种方式都可以用Request[...],只是效率相对前两个较差一些;

Response

ResponseHttpResponse的实例。他封装了服务器要返回给客户端浏览器Http响应信息。

常见的属性及方法:

ServerHttpServerUtility的实例。他提供了许多用于web请求的辅助方法

常见的属性和方法:

Server.HtmlDecode()Server.HtmlEncode() Server.UrlEncode()、 Server.UrlDecode()分别对HtmlUrl编码及解码 其实是调用的HttpUtility类的静态方法Server.MapPath():返回与web服务器上指定虚拟路径相对应的物理文件路径

Server.Transer():内部重定向,终止当前页的执行,并使用指定的Url执行新的页.不能到重定向到外部网站

Server.Excute():将控制权交给指定的页面执行。

在请求执行链的各个阶段中,会有一个对象在各个对象间进行传递,即HttpContextHttpContext封装了处理单个Http请求的所有信息。      Request,Response,ServerHttpContext的属性对象。

状态保持

由于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" οnclick="LinkButton1_Click">保馈?存?</asp:LinkButton>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:LinkButton ID="LinkButton2" runat="server" οnclick="LinkButton2_Click">获?取?</asp:LinkButton>
<asp:HiddenField ID="HiddenField1" runat="server" />
    </div>
    </form>
</body>
</html>

隐藏域存在于网页的Form表单中,当页面关闭时,保存在隐藏域中的信息就会丢失.

Cookies

CookieHttpCookie的实例。用于服务器端与客户端的数据传输。大多数的浏览器最多只能支持4kb的大小。我们在服务端写的Cookie其实是通过Http响应报文的Set-Cookie发送的。浏览器正是通过这个来接收Cookie的。那么服务端是怎么接收浏览器端的Cookie的呢?是通过请求报文的Cookie的发送。

常用的属性及方法

Cookie.Expires():设置cookie失效时间及删除cookie

通过CookieDomain属性可以限制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";

客户端就会生成一个以__VIEWSTATEname的隐藏域,这样就可很方便的将服务器端的数据保存在到客户端中(通过隐藏域)其值value通过序列化和base64编码得到

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY2MjYyODY3NmRkFeyA4BEv7F9VRHbgAZq0GM92u03Z5culOrmvrVB4IsA=" /> 

ViewSate的缺点:只能用于postback;很容易生成大量的无用的html代码;一般我们都会将其禁用。控件的话使用enableviewstate=false属性,页面的话aspxPage指令区加上EnableViewState="false" 

Session

Session提供了一种把客户端的数据保存在服务器上的方式。每组客户端的数据都会生成一个与之对应的key叫做SessionID,并将其发送给客户端。而客户端就根据这个key在服务端取得相应的数据。一般情况下SessionIDCookie的形式保存在浏览器中,如果不能使用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:设置失效时间

SessionHttpSessionState的实例,而HttpSessionState来自于SessionStateModule。在每次请求处理过程中,HttpApplication在请求管道中会检查当前请求的处                理程序是否实现了IRequiresSessionState接口。如果实现SessionStateModule将会为这个请求分配HttpSessionState。同时SessionStateModule还负责SessionID的生  成、Cookieless会话管理、从外部状态提供程序中检索回话数据以及将数据绑定到请求的调用上下文。SessionStateModule创建完SessionID之后,他会触发               Session_Start事件Global.axax中)。

SessionStateModule并不在其内部存储会话数据。会话状态始终保存在名为“状态提供程序”的外部组件中。有三种不同的状态提供程序

1.InProc会话值在Asp.Net辅助进程中(wp.exew3wp.exe)的内存中保持活动对象(默认的)

2.StateServer会话值被序列化并存储在单独的进程(aspnet_state)的内存中。

3.SQLServer会话值被序列化并存储在Microsoft SQL Server表中。

 

参考书籍:Asp.Net 本质论

 

转载于:https://www.cnblogs.com/cjnwan/archive/2013/03/19/2962330.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值