ASP.NET - 服务器端
我们研究了页面生命周期以及页面如何包含各种控件。 页面本身被实例化为控制对象。 所有 Web 表单基本上都是 ASP.NET Page 类的实例。 页面类具有以下与内在对象相对应的极其有用的属性:
- Session
- Application
- Cache
- Request
- Response
- Server
- User
- Trace
我们将在适当的时候讨论每个对象。 在本教程中,我们将探讨服务器对象、请求对象和响应对象。
Server 对象
Asp.NET 中的 Server 对象是 System.Web.HttpServerUtility 类的实例。 HttpServerUtility 类提供了大量的属性和方法来执行各种作业。
服务器对象的属性和方法
HttpServerUtility 类的方法和属性通过 ASP.NET 提供的内部 Server 对象公开。
下表提供了属性列表:
属性 | 描述 |
---|---|
MachineName | 服务器计算机的名称 |
ScriptTimeOut | 获取和设置请求超时值(以秒为单位)。 |
下表提供了一些重要方法的列表:
方法 | 描述 |
---|---|
CreateObject(String) | 创建由其 ProgID(编程 ID)标识的 COM 对象的实例。 |
CreateObject(Type) | 创建由其类型标识的 COM 对象的实例。 |
Equals(Object) | 判断指定的Object是否等于当前的Object。 |
Execute(String) | 在当前请求的上下文中执行指定虚拟路径的处理程序。 |
Execute(String, Boolean) | 在当前请求的上下文中执行指定虚拟路径的处理程序,并指定是否清除 QueryString 和 Form 集合。 |
GetLastError | 返回前一个异常。 |
GetType | 获取当前实例的类型。 |
HtmlEncode | 将普通字符串更改为合法 HTML 字符的字符串。 |
HtmlDecode | 将 Html 字符串转换为普通字符串。 |
ToString | 返回表示当前对象的字符串。 |
Transfer(String) | 对于当前请求,终止当前页面的执行,并使用指定的页面URL路径开始执行新页面。 |
UrlDecode | 将 URL 字符串转换为普通字符串。 |
UrlEncodeToken | 与 UrlEncode 的工作方式相同,但在包含 Base64 编码数据的字节数组上。 |
UrlDecodeToken | 与 UrlDecode 的工作方式相同,但在包含 Base64 编码数据的字节数组上。 |
MapPath | 返回服务器上指定虚拟文件路径对应的物理路径。 |
Transfer | 将执行转移到当前应用程序中的另一个网页。 |
Request 请求对象
Request 请求对象是 System.Web.HttpRequest 类的实例。 它表示使页面加载到浏览器中的 HTTP 请求的值和属性。
该对象呈现的信息由更高级别的抽象(Web 控制模型)包装。 然而,这个对象有助于检查一些信息,例如客户端浏览器和cookie。
请求对象的属性和方法
下表提供了 Request 对象的一些值得注意的属性:
属性 | 描述 |
---|---|
AcceptTypes | 获取客户端支持的 MIME 接受类型的字符串数组。 |
ApplicationPath | 获取服务器上 ASP.NET 应用程序的虚拟应用程序根路径。 |
Browser | 获取或设置有关请求客户端的浏览器功能的信息。 |
ContentEncoding | 获取或设置实体主体的字符集。 |
ContentLength | 指定客户端发送的内容的长度(以字节为单位)。 |
ContentType | 获取或设置传入请求的 MIME 内容类型。 |
Cookie | 获取客户端发送的cookie集合。 |
FilePath | 获取当前请求的虚拟路径。 |
Files | 获取客户端上传的文件集合,采用多部分 MIME 格式。 |
Form | 获取表单变量的集合。 |
Headers | 获取 HTTP 标头的集合。 |
HttpMethod | 获取客户端使用的HTTP数据传输方法(例如GET、POST或HEAD)。 |
InputStream | 获取传入的HTTP实体主体的内容。 |
IsSecureConnection | 获取一个值,指示 HTTP 连接是否使用安全套接字(即 HTTPS)。 |
QueryString | 获取HTTP查询字符串变量的集合。 |
RawUrl | 获取当前请求的原始URL。 |
RequestType | 获取或设置客户端使用的HTTP数据传输方法(GET或POST)。 |
ServerVariables | 获取 Web 服务器变量的集合。 |
TotalBytes | 获取当前输入流中的字节数。 |
Url | 获取有关当前请求的 URL 的信息。 |
UrlReferrer | 获取有关链接到当前 URL 的客户端先前请求的 URL 的信息。 |
UserAgent | 获取客户端浏览器的原始用户代理字符串。 |
UserHostAddress | 获取远程客户端的IP主机地址。 |
UserHostName | 获取远程客户端的 DNS 名称。 |
UserLanguages | 获取客户端语言首选项的排序字符串数组。 |
下表提供了一些重要方法的列表:
方法 | 描述 |
---|---|
BinaryRead | 从当前输入流中执行指定字节数的二进制读取。 |
Equals(Object) | 确定指定对象是否等于当前对象。 (继承自对象。) |
GetType | 获取当前实例的类型。 |
MapImageCoordinates | 将传入的图像字段表单参数映射到适当的 x 坐标和 y 坐标值。 |
MapPath(String) | 将指定的虚拟路径映射到物理路径。 |
SaveAs | 将 HTTP 请求保存到磁盘。 |
ToString | 返回表示当前对象的字符串。 |
ValidateInput | 对通过 Cookie、Form 和 QueryString 属性访问的集合进行验证。 |
Response 响应对象
Response 响应对象代表服务器对客户端请求的响应。 它是 System.Web.HttpResponse 类的一个实例。
在 ASP.NET 中,响应对象在将 HTML 文本发送到客户端方面不起任何重要作用,因为服务器端控件具有嵌套的、面向对象的方法来呈现自身。
但是,HttpResponse 对象仍然提供一些重要的功能,例如 cookie 功能和 Redirect() 方法。 Response.Redirect() 方法允许将用户转移到应用程序内部和外部的另一个页面。 它需要一个往返。
响应对象的属性和方法
下表提供了 Response 对象的一些值得注意的属性:
属性 | 描述 |
---|---|
Buffer | 获取或设置一个值,指示是否缓冲输出并在完整响应处理完成后发送它。 |
BufferOutput | 获取或设置一个值,指示是否缓冲输出并在整个页面处理完成后发送它。 |
Charset | 获取或设置输出流的HTTP字符集。 |
ContentEncoding | 获取或设置输出流的HTTP字符集。 |
ContentType | 获取或设置输出流的 HTTP MIME 类型。 |
Cookie | 获取响应cookie集合。 |
Expires | 获取或设置浏览器上缓存的页面过期之前的分钟数。 |
ExpiresAbsolute | 获取或设置从缓存中删除缓存信息的绝对日期和时间。 |
HeaderEncoding | 获取或设置一个编码对象,该对象表示当前标头输出流的编码。 |
Headers | 获取响应头的集合。 |
IsClientConnected | 获取一个值,指示客户端是否仍连接到服务器。 |
Output | 允许将文本输出到传出 HTTP 响应流。 |
OutputStream | 启用到传出 HTTP 内容正文的二进制输出。 |
RedirectLocation | 获取或设置 Http Location 标头的值。 |
Status | 设置返回给客户端的状态行。 |
StatusCode | 获取或设置返回给客户端的输出的 HTTP 状态代码。 |
StatusDescription | 获取或设置返回给客户端的输出的 HTTP 状态字符串。 |
SubStatusCode | 获取或设置限定响应状态代码的值。 |
SuppressContent | 获取或设置一个值,指示是否向客户端发送HTTP内容。 |
下表提供了一些重要方法的列表:
方法 | 描述 |
---|---|
AddHeader | 将 HTTP 标头添加到输出流。 提供 AddHeader 是为了与早期版本的 ASP 兼容。 |
AppendCookie | 基础设施将 HTTP cookie 添加到内部 cookie 集合中。 |
AppendHeader | 将 HTTP 标头添加到输出流。 |
AppendToLog | 将自定义日志信息添加到 Internet 信息服务 (IIS) 日志文件中。 |
BinaryWrite | 将一串二进制字符写入 HTTP 输出流。 |
ClearContent | 清除缓冲流中的所有内容输出。 |
Close | 关闭与客户端的套接字连接。 |
End | 将所有当前缓冲的输出发送到客户端,停止页面的执行,并引发 EndRequest 事件。 |
Equals(Object) | 判断指定对象是否等于当前对象。 |
Flush | 将所有当前缓冲的输出发送到客户端。 |
GetType | 获取当前实例的类型。 |
Pics | 将 HTTP PICS-Label 标头附加到输出流。 |
Redirect(String) | 将请求重定向到新 URL 并指定新 URL。 |
Redirect(String, Boolean) | 将客户端重定向到新 URL。 指定新的 URL 以及当前页面的执行是否应终止。 |
SetCookie | 更新 cookie 集合中的现有 cookie。 |
ToString | 返回表示当前对象的字符串。 |
TransmitFile(String) | 将指定文件直接写入 HTTP 响应输出流,而不将其缓冲在内存中。 |
Write(Char) | 将一个字符写入 HTTP 响应输出流。 |
Write(Object) | 将对象写入 HTTP 响应流。 |
Write(String) | 将字符串写入 HTTP 响应输出流。 |
WriteFile(String) | 将指定文件的内容作为文件块直接写入 HTTP 响应输出流。 |
WriteFile(String, Boolean) | 将指定文件的内容作为内存块直接写入 HTTP 响应输出流。 |
示例
下面的简单示例有一个文本框控件(用户可以在其中输入名称)、一个用于将信息发送到服务器的按钮以及一个用于显示客户端计算机的 URL 的标签控件。
内容文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="server_side._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>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)) { // Access the HttpServerUtility methods through // the intrinsic Server object. Label1.Text = "Welcome, " + Server.HtmlEncode(TextBox1.Text) + ". <br/> The url is " + Server.UrlEncode(Request.Url.ToString()) } }
运行页面可以看到以下结果: