ASP.NET 服务器端
我们研究了页面生命周期以及页面如何包含各种控件。页面本身被实例化为一个控制对象。所有 Web 表单基本上都是 ASP.NET Page 类的实例。页面类具有以下与内在对象相对应的非常有用的属性:
- Session
- 应用
- Cache
- Request
- Response
- Server
- User
- Trace
我们将在适当的时候讨论这些对象中的每一个。在本教程中,我们将探索 Server 对象、Request 对象和 Response 对象。
服务器对象
Asp.NET 中的 Server 对象是 System.Web.HttpServerUtility 类的一个实例。 HttpServerUtility 类提供了许多属性和方法来执行各种作业。
服务器对象的属性和方法
HttpServerUtility 类的方法和属性通过 ASP.NET 提供的内部 Server 对象公开。
下表提供了属性列表:
Property | 描述 |
---|---|
机器名称 | 服务器计算机名称 |
脚本超时 | 获取和设置请求超时值(以秒为单位)。 |
下表提供了一些重要方法的列表:
Method | 描述 |
---|---|
创建对象(字符串) | 创建由其 ProgID(程序 ID)标识的 COM 对象的实例。 |
创建对象(类型) | 创建由其类型标识的 COM 对象的实例。 |
等于(对象) | 确定指定的 Object 是否等于当前的 Object。 |
执行(字符串) | 在当前请求的上下文中执行指定虚拟路径的处理程序。 |
执行(字符串,布尔值) | 在当前请求的上下文中执行指定虚拟路径的处理程序,并指定是否清除 QueryString 和 Form 集合。 |
获取最后一个错误 | 返回上一个异常。 |
GetType | 获取当前实例的类型。 |
html编码 | 将普通字符串更改为具有合法 HTML 字符的字符串。 |
html解码 | 将 Html 字符串转换为普通字符串。 |
ToString | 返回表示当前对象的字符串。 |
转移(字符串) | 对于当前请求,终止当前页面的执行,并使用页面的指定 URL 路径开始执行新页面。 |
网址解码 | 将 URL 字符串转换为普通字符串。 |
UrlEncodeToken | 与 UrlEncode 相同,但在包含 Base64 编码数据的字节数组上工作。 |
UrlDecodeToken | 与 UrlDecode 相同,但在包含 Base64 编码数据的字节数组上工作。 |
MapPath | 返回与服务器上指定的虚拟文件路径对应的物理路径。 |
Transfer | 将执行转移到当前应用程序中的另一个网页。 |
请求对象
请求对象是 System.Web.HttpRequest 类的一个实例。它表示使页面加载到浏览器中的 HTTP 请求的值和属性。
此对象提供的信息由更高级别的抽象(Web 控制模型)包装。但是,此对象有助于检查一些信息,例如客户端浏览器和 cookie。
请求对象的属性和方法
下表提供了 Request 对象的一些值得注意的属性:
Property | 描述 |
---|---|
接受类型 | 获取客户端支持的 MIME 接受类型的字符串数组。 |
应用路径 | 获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径。 |
Browser | 获取或设置有关请求客户端的浏览器功能的信息。 |
内容编码 | 获取或设置实体主体的字符集。 |
内容长度 | 指定客户端发送的内容的长度(以字节为单位)。 |
内容类型 | 获取或设置传入请求的 MIME 内容类型。 |
Cookies | 获取客户端发送的 cookie 集合。 |
FilePath | 获取当前请求的虚拟路径。 |
Files | 获取客户端上传的文件集合,采用多部分 MIME 格式。 |
Form | 获取表单变量的集合。 |
Headers | 获取 HTTP 标头的集合。 |
Http方法 | 获取客户端使用的 HTTP 数据传输方法(如 GET、POST 或 HEAD)。 |
输入流 | 获取传入的 HTTP 实体正文的内容。 |
安全连接 | 获取一个值,该值指示 HTTP 连接是否使用安全套接字(即 HTTPS)。 |
请求参数 | 获取 HTTP 查询字符串变量的集合。 |
RawUrl | 获取当前请求的原始 URL。 |
请求类型 | 获取或设置客户端使用的 HTTP 数据传输方法(GET 或 POST)。 |
服务器变量 | 获取 Web 服务器变量的集合。 |
总字节数 | 获取当前输入流中的字节数。 |
Url | 获取有关当前请求的 URL 的信息。 |
UrlReferrer | 获取有关链接到当前 URL 的客户端先前请求的 URL 的信息。 |
用户代理 | 获取客户端浏览器的原始用户代理字符串。 |
用户主机地址 | 获取远程客户端的 IP 主机地址。 |
用户主机名 | 获取远程客户端的 DNS 名称。 |
用户语言 | 获取客户端语言首选项的排序字符串数组。 |
下表提供了一些重要方法的列表:
Method | 描述 |
---|---|
二进制读取 | 从当前输入流中执行指定字节数的二进制读取。 |
等于(对象) | 确定指定对象是否等于当前对象。 (继承自对象。) |
GetType | 获取当前实例的类型。 |
地图图像坐标 | 将传入的图像字段表单参数映射到适当的 x 坐标和 y 坐标值。 |
地图路径(字符串) | 将指定的虚拟路径映射到物理路径。 |
SaveAs | 将 HTTP 请求保存到磁盘。 |
ToString | 返回表示当前对象的字符串。 |
验证输入 | 导致对通过 Cookies、Form 和 QueryString 属性访问的集合进行验证。 |
响应对象
Response 对象表示服务器对客户端请求的响应。它是 System.Web.HttpResponse 类的一个实例。
在 ASP.NET 中,响应对象在将 HTML 文本发送到客户端时不起任何重要作用,因为服务器端控件具有嵌套的、面向对象的方法来呈现自身。
但是,HttpResponse 对象仍然提供了一些重要的功能,例如 cookie 功能和 Redirect() 方法。 Response.Redirect() 方法允许将用户转移到应用程序内部和外部的另一个页面。它需要往返。
响应对象的属性和方法
下表提供了 Response 对象的一些值得注意的属性:
Property | 描述 |
---|---|
Buffer | 获取或设置一个值,该值指示是否缓冲输出并在完成响应处理后发送。 |
缓冲区输出 | 获取或设置一个值,该值指示是否缓冲输出并在完成页面处理后发送。 |
Charset | 获取或设置输出流的 HTTP 字符集。 |
内容编码 | 获取或设置输出流的 HTTP 字符集。 |
内容类型 | 获取或设置输出流的 HTTP MIME 类型。 |
Cookies | 获取响应 cookie 集合。 |
Expires | 获取或设置缓存在浏览器上的页面过期前的分钟数。 |
过期绝对 | 获取或设置从缓存中删除缓存信息的绝对日期和时间。 |
标头编码 | 获取或设置一个编码对象,该对象表示当前标头输出流的编码。 |
Headers | 获取响应标头的集合。 |
IsClientConnected | 获取一个值,该值指示客户端是否仍连接到服务器。 |
输出 | 启用将文本输出到传出 HTTP 响应流。 |
输出流 | 启用到传出 HTTP 内容正文的二进制输出。 |
重定向位置 | 获取或设置 Http Location 标头的值。 |
Status | 设置返回给客户端的状态行。 |
状态码 | 获取或设置返回给客户端的输出的 HTTP 状态码。 |
状态描述 | 获取或设置返回给客户端的输出的 HTTP 状态字符串。 |
子状态码 | 获取或设置限定响应状态代码的值。 |
抑制内容 | 获取或设置一个值,该值指示是否向客户端发送 HTTP 内容。 |
下表提供了一些重要方法的列表:
Method | 描述 |
---|---|
添加标题 | 将 HTTP 标头添加到输出流。提供 AddHeader 是为了与早期版本的 ASP 兼容。 |
附加Cookie | 基础设施将 HTTP cookie 添加到内部 cookie 集合中。 |
附加标头 | 将 HTTP 标头添加到输出流。 |
追加日志 | 将自定义日志信息添加到 Internet 信息服务 (IIS) 日志文件。 |
二进制写入 | 将二进制字符串写入 HTTP 输出流。 |
清除内容 | 清除缓冲区流中的所有内容输出。 |
Close | 关闭与客户端的套接字连接。 |
End | 将所有当前缓冲的输出发送到客户端,停止页面的执行,并引发 EndRequest 事件。 |
等于(对象) | 确定指定对象是否等于当前对象。 |
Flush | 将所有当前缓冲的输出发送到客户端。 |
GetType | 获取当前实例的类型。 |
Pics | 将 HTTP PICS-Label 标头附加到输出流。 |
重定向(字符串) | 将请求重定向到新 URL 并指定新 URL。 |
重定向(字符串,布尔值) | 将客户端重定向到新 URL。指定新 URL 以及当前页面的执行是否应该终止。 |
设置Cookie | 更新 cookie 集合中的现有 cookie。 |
ToString | 返回表示当前对象的字符串。 |
传输文件(字符串) | 将指定文件直接写入 HTTP 响应输出流,而不将其缓冲在内存中。 |
写(字符) | 将字符写入 HTTP 响应输出流。 |
写(对象) | 将对象写入 HTTP 响应流。 |
写(字符串) | 将字符串写入 HTTP 响应输出流。 |
写入文件(字符串) | 将指定文件的内容作为文件块直接写入 HTTP 响应输出流。 |
写入文件(字符串,布尔值) | 将指定文件的内容作为内存块直接写入 HTTP 响应输出流。 |
例子
下面的简单示例有一个文本框控件,用户可以在其中输入名称,一个按钮将信息发送到服务器,以及一个标签控件,用于显示客户端计算机的 URL。
内容文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="server_side._Default" %> <!DOCTYPE html PUBLIC "-// W3C "http:// www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http:// www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> Enter your name: <br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" /> <br /> <asp:Label ID="Label1" runat="server"/> </div> </form> </body> </html>
Button1_Click 背后的代码:
protected void Button1_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(TextBox1.Text)) { // 通过访问 HttpServerUtility 方法 // 内在的服务器对象。 Label1.Text = "Welcome, " + Server.HtmlEncode(TextBox1.Text) + ". <br/> The url is " + Server.UrlEncode(Request.Url.ToString()) } }
运行页面可以看到如下结果: