Request对象
用来获取客户端在请求一个页面或传送一个Form是提供的所有信息。它包括用户的HTTP变量、能够识别的浏览器、存储客户端的Cookie信息和请求地址等。
Request对象是System.Web.httpRequest类的对象
属性
- QueryString :获取HTTP查询字符串变量集合,主要用于收集HTTP协议中Get请求发送的数据
- Form :获取窗体或页面变量的集合,用于收集Post方法发送的请求数据
- ApplicationPath:获取服务器上ASP.NET虚拟应用程序的根目录路径
- ContertLength:指定客户端发送的内容长度
- Cookies:获取客户端发送的Cookie集合
- FilePath:获取当前请求的虚拟路径
- Files:获取采用多部分MIME格式的由客户端上载的文件集合
- Item:从Cookies, From, QueryString或ServerVariables集合中获取指定的对象
- Path:获取当前请求的虚拟路径
- ServerVarible:环境变量集合包含了服务器和客户端的系统内信息
- Params:它是QueryString、Form和ServerVarible这三种方式的集合,不区分是由哪种方式传递的参数
- Url:获取有关当前请求的URL信息
- UserHostName:获取远程客户端的DNS名称
- UserHostAddress:获取远程客户端的IP主机地址
- IsLocal:获取一个值,该值指示该请求是否来自本地计算机
- Browser:获取或设置有关正在请求的客户端浏览器功能信息
方法
- BinaryRead():执行对当前输入流进行制定字节数的二进制读取
- SaveAs():将HTTP请求保存到磁盘
- MapPath():将指定的路径映射到物理路径
Response对象
Response对象是HttpRespone类的一个实例。该类主要是封装来自ASP.NET操作的HTTP相应信息。Response对象将数据作为请求的结果从服务器发送到客户浏览器中,并提供有关响应的消息。它可用来在页面中输出数据,在页面中跳转,还可以传递各个页面的参数。
方法
- Redirect:将网页重新转到另一地址
- Write:写出指定字符串。
- AppendHeader:语法格式
Response.AppendHeader(Name,Value)
参数Name为HTTP头,参数Value为HTTP头的值。
HTTP头是HTTP协议规定的请求和响应消息都支持的头域内容。HTTP头是页面通过HTTP协议访问页面时,最先响应的请求和响应消息,例如HTTP头中的Location,Location头用于将页面重定向到另一个页面,与Redirect方法相似。 - WriteFile 将文件输出到客户端
- Flush 将缓冲区的数据输出到客户端浏览器
- End 停止并结束ASP网页的处理
- Close 关闭客户端的联机
- ClearHeaders 清除缓冲区中的页面标题
- Clear 清除缓冲区的数据
- BinaryWrite 将二进制字符或字符串输出到客户端浏览器
- AppendToLog 将自定义的数据加入到IIS日志文件中(Log File),以便追踪与分析记录。
属性
- ContentType:输出流的内容类型比如html(text/html) 、普通文本(text/pain)还是JPEG图片(image/JPEG)。
- ContentEncoding:输出流的编码
- Cookies : 返回浏览器的cookies的集合
- Buffer : 设置缓冲信息, true | false .默认是true
- Expires : 获取或设置在浏览器上缓存的页过期之前的分钟数, 设置为0,则立刻过期
Page对象
每个aspx文件对应的一个page对象,.aspx页面与后台.cs代码类(局部类)合并生成页面类,Page对象是页面类的实例。所有的.aspx文件(Web窗体页)都继承自System.Web.UI.Page类
<%@ Page
Language=“C#” —指明后台使用C#语言
AutoEventWireup=“true” —设置是否自动调用网页Load事件,默认是true
CodeBehind=“WebDemo1.aspx.cs”—其.aspx文件上绑定的后台代码文件
Inherits=“ASP.NETDemo.Demo1.WebDemo1” —后台代码类
%>
属性
- IsPostBack:该属性可以检查.aspx页是否为传递回服务器的页面,常用于判断页面是否为首次加载。如果为true则为回发响应,如果为false则为首次加载
- IsValid:该属性用于判断页面中的所有输入的内容是否应经通过验证,它是一个布尔值的属性。当需要使用服务器端验证时,可以使用该属性。
- IsCrossPagePostBack:该属性判断页面是否使用跨页提交,它是一个布尔值的属性。
事件
Page类常用的事件及执行的先后顺序:
- Page.PreInit 事件:在页初始化开始时发生
- Page.Init 事件:当服务器控件初始化时发生;初始化是控件生存期的第一步。 (继承自 Control。)
- Page.InitComplite事件:在页初始化完成时发生
- Page.PreLoad事件:在页 Load 事件之前发生
- Page.Load事件:当服务器控件加载到 Page 对象中时发生。 (继承自 Control )
- Page.LoadComplete 事件:在页生命周期的加载阶段结束时发生
- Page.PreRender事件 :在加载 Control 对象之后、呈现之前发生。 (继承自 Control。)
- Page.PreRenderComplete 事件:在呈现页内容之前发生
ViewState对象
视图状态,在 ASP .NET 中,当一个表单被提交时,表单会连同表单值一起出现在浏览器窗口中。如何做到的呢?这是因为 ASP .NET 维持了您的 ViewState。 ViewState 会在页面被提交到服务器时表明它的状态。这个状态是通过在带有 < form runat=“server”> 控件的每个页面上放置一个隐藏域定义的。这个对象是ASP.NET中特有的对象,在其他语言的后端技术中没有这个对象
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//如果是第一次访问
{
//先将Count的值设为0,并且保存在ViewState中
ViewState["count"] = 0;
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
//每次点击按钮先取出ViewState中的值并且累加之后再次赋给ViewState
ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1;
Literal1.Text = ViewState["count"].ToString();
}
使用ViewState实现页面信息的保存
保存数据:ViewState对象存储数据[键值对]Key=Value
取出数据:根据Key值取出Value值
总结:
- ViewState中保存的数据全部被转换成object类型,取出时务必强制转换成特定类型
- ViewState只能在同一个页面的连续多次请求之间保存信息,页面跳转后信息就会丢失
ViewState的本质
ViewState的本质是一个隐藏域,和原始的.aspx文件中的多出来的标签一样,都是一个隐藏域,第一次创建
ViewState对象其实是创建了一个隐藏域
Application对象
作用
应用程序级别的数据保存(类似于在CS开发中在Winform或WPF中声明的全局变量,这个变量一般在程序开启的时候创建好了,在程序使用过程中一直存在,但是会跟着不同的程序功能存储的数据可能会发生变化)相当于在BS服务器中存储的一个变量,只要服务器本次开启那么这个数据就被创建存储,只要服务器不关闭那么这个数据就一直存在,在所有客户端访问过程中都可以对这个对象存储的数据进行访问和更改使用方式和Session一样采用“键值”对的方式
特征
- 位置:服务器内存,执行速度快
- 使用范围:整个应用程序中
- 类型:任意类型
- 生命周期:应用程序开始创建到销毁
使用场合
例如统计这个站点的访问量,或者监控当前站点的访问人数
Global.asax文件
全局应用程序类:Global.asax,可以理解为Application对象主要在这个全局应用程序类中使用
- 处理应用程序级别的事件的可选文件
- 必须放在应用程序的根目录下
常用事件 | 说明 |
---|---|
Application_Start | 接收第一个请求时触发 |
Application_End | 应用程序结束时触发 |
Session_Start | 某用户第一访问时触发 |
Session_End | 某用户退出应用程序时触发 |
Server对象
Server对象是HttpServerUtility的一个实例,它提供了对服务器上方法和属性访问,用于访问服务器上的资源。
属性
MarhineName:获取服务器的计算机名称
ScriptTimeout:获取和设置请求超时值
方法
Execute:在当前请求的上下文中执行指定资源的处理程序,然后将控制返回给处理程序
HtmlDecode:对已被编码以消除无效的HTML字符的字符串进行解码HtmlEncode:对要在浏览器中显示的字符进行编码
MapPath:返回与web服务器上的指定虚拟路径相对应的物理文件路径UrlDecode:对字符串进行解码,该字符串为了进行HTTP传输而编码并在URL中发送到服务器
UrlEncode:编码字符串,以便通过URL从Web服务器到客户端经行可靠的HTTP传输
Transfer:终止当前页的执行,并为当前请求开始执行新页
ASP.NET常用对象比较
对象名称 | 存储位置 | 有效时间 | 信息共享范围 |
---|---|---|---|
Request/Response | 请求和响应的过程中 | 请求结束之前 | 一次请求的一个页面 |
ViewState | 被请求的页面中 | 页面关闭之前 | 多次请求的一个页面 |
Session | Web服务器端 | 规定的时间内 | 同一网站的不同页面 |
Cookie | 客户端硬盘中 | 规定的时间内 | 同一网站的不同页面 |
Application | Web服务器端 | IIS重启之前 | 整个应用程序中 |
ASP.NET页面跳转比较
- Server.Execute():用于执行从当前页面转移到另一个页面,并将执行返回到当前页面,执行所转移的页面在同一浏览器窗口中执行,然后原始页面继续执行。所以执行Execute方法后原始页面保留控制权。
Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面
Page指令的EnableViewStateMac属性设置成False。 - Server. Transfer():用于将执行完全转移到指定页面。执行该方法时主调页面将失去对其的控制权。但是Url地址依然保留原始页面的地址
Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(MachineAuthentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的 EnableViewStateMac属性设置成False。server.Transfer()有一个不足就是:当用户在a.aspx中提交了一个表单,然后用Server.Transfer()进入 b.aspx,这时如果用户刷新一下页面,浏览器便会问用户是否“重试”发送表单,如果用户点击“是”,那么,表单中的数据被重新发送到服务器。如发送表单的作用就是为了向数据库中插入一条记录,结果导不希望发生的事——同一表单被多次加入到数据库中。 - Response.Redirect():导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。
这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。
Response.Redirect的两个重要的缺陷:
1.在Response.Redirect中,我们得不到任何第一页的输出
2.Response.Redirect会丢失request中的所有属性,当然我们可以通过一些其他的办法,比如session来搞定,可是,有些页的参数是在request中传过来的,这样的话,就不行了
3.Response.Redirect需要client端再发起一个请求。
总结
在网络状态较好的情况下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服务器上的aspx或非aspx(html)资源
Server.Transfer方法和Server.Execute方法最灵活!! 但只能转到同一Application目录下,也有可能导致不期望的结果发生Server.Execute方法占用资源最多。
服务器的特性
无状态特性
- Web服务器不会保留每次浏览器所发出的HTTP请求的具体信息和当时的状态
- 即使请求来自于同一个浏览器,他也将其视为“陌生人”,绝不会“记得浏览器”在刚才做了些什么
- 在ASP.NET后台中,不再有“成员变量”,理解为每次的请求对于服务器而言都是一次新生,返回的是一个新对象
- ASP.NET中专门提供了一个网页多次请求之间保存信息的对象"ViewState"(视图状态)对象来模拟“成员变量”的角色
问号传值
可以利用类似于get请求的方式将数据传送到服务器,然后由服务器将数据再转交给目标页面。这种传值方式只适合传递一些不是很重要的数据,不会影响整个网站的主要流程
实现文件上传
B/S中文件上传和C/S中的文件上传性质完全不一样
在C/S中文件上传基本上的原理是:将客户端计算机上的目标文件通过Socket网络将文件发送至目标服务器端计算机,然后将接受到的数据转换为原始文件
文件–转成字节流–发送到服务器–将字节流转成文件–保存
而B/S中文件上传指的是在客户端浏览器上,将目标文件选择好之后,通过网络将文件发送至目标服务器计算机,然后将接收到的文件保存在服务器计算机上。
文件上传思路
BS项目中文件上传问题中,要明确,一般系统默认客户端提交请求的数据必须有一个大小限制,请求的报文有大小限制Asp.net中,上传文件的默认大小是4096 KB,也就是4M,不过你可以在Web.config中更改这个数据。
<httpRuntime targetFramework="4.6.1" maxRequestLength="40960"/>