在asp教程.net中,http响应信息由httpresponse类进行封装。该类的实例创建于处理请求的http管道建立时,之后该实例被链接到与请求关联的httpcontext对象,通过其response属性暴露。虽然用户定义的asp.net教程代码不需使用httpresponse的构造函数,但此函数可帮助我们理解该类的本质:
public httpresponse(textwriter writer);
public class myfilterstream : memorystream
{
private stream m_stream;
public myfilterstream(stream filterstream)
{
m_stream = filterstream;
}
//the write method actually does the filtering
public override void write(byte[] buffer, int offset, int count)
{
//grab the output as a string
string buf = utf8encoding.utf8.getstring(buffer, offset, count);
//change lowercase chars to uppercase
buf = buf.toupper();
//write the resulting string back the response stream
byte[] data = utf8encoding.utf8.getbytes(buf.tostring());
m_stream.write(data, 0, data.length);
}
}
void page_load(object sender, eventargs e)
{
response.filter = new myfilterstream(response.filter);
}
在传输大型文件时,writefile和binarywrite方法会对web服务器的内存造成压力。为什么会这样呢?因为这两个方法要将整个数据块(文件或字节数组的内容)加载到web服务器的内存中。对于大型文件,这会造成严重的内存问题,迫使asp.net进行自身被回收。transmitfile方法旨在优雅地解决这个问题,该方法能够将输出从文件直接发送到asp.net isapi扩展,随后下载到客户端,而不用向isapi扩展传送大量字符串
httprequest对象包含了传入web请求的http数据包中包含的所有信息。http标头、查询字符串、表单的输入字段、路径和url信息的内容,被分别组织在不同的集合以及其他特殊对象中,能以编程方式便捷地访问。当asp.net开始处理web请求时,httprequest对象会被填充,并通过httpcontext的request属性暴露出来。
httprequest类的属性
httprequest类的属性可被分为三类:请求类型、客户端数据和连接
有关请求的信息
下表列出了有关请求信息的属性:
httpbrowsercapabilities对象包含有关浏览器功能的大量信息,包括是否支持activex控件、脚本语言、框架和cookie等。当请求到达时,为确定发出请求的浏览器,会使用用户代理信息创建httpbrowsercapabilities类的实例,并用浏览器特定的信息进行填充。这些信息不是浏览器动态设置的,而是从服务器存储库中离线获取的。
来自客户端的信息
下表列出了httprequest描述客户端数据的属性:
params集合结合了4个不同但形式相似的集合:querystring、form、servervariables、cookies,这与独立集合所包含的数据一致。该集合按以下次序填充:querystring、form、cookies、servervariables。
有关连接的信息
下表列出了与打开连接有关的属性:
uri类提供了统一资源标识符的对象表示。
httprequest类的方法
下表列出了httprequest类的主要方法:
将请求保存至磁盘
saveas方法使我们能创建存储http请求所有内容的文件。注意,存储介质只能是磁盘文件,而不能使用流和编写器。由于asp.net默认情况下不会被授予磁盘的写入权限,所以,为asp.net帐户授予新建文件(或文件夹)的完全访问权限,是saveas成功运行的条件之