17.2 Response对象
到目前为止,对于Response对象相信大家并不陌生,因为前面的章节已经多次用到该对象,它是System.Web.HttpResponse类的实例。其原型如下所示:
[DesignerSerializationVisibility(
DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public HttpResponse Response{get;}
其中,System.Web.HttpResponse类封装了来自ASP.NET操作的HTTP响应信息,可用于将HTTP响应信息发送到客户端。它的常用属性与方法如表17-1和表17-2所示。
从表17-1与表17-2中可以看出,Response对象确实提供了许多有用且重要的功能。如可以利用它的Redirect方法将请求重定向到新URL,并指定该新URL:
Response.Redirect("http://www.comesns.com/aspnet/index.htm");
也可以使用它的Write方法将指定的对象写入HTTP响应输出流,从而显示在浏览器上。如下面的代码所示:
Response.Write("Hello:"+name);
下面通过一个完整的示例来演示Response对象的使用,该示例的功能是在请求该页时将绘制一幅矩形JPEG图像。如下面的代码所示:
public partial class WebForm1:System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType="image/Jpeg";
Response.Clear();
Response.BufferOutput=true;
Font rectangleFont=new Font(
"隶书",20,FontStyle.Bold);
int height=120;
int width=500;
Bitmap bmp=new Bitmap(
width, height, PixelFormat.Format24bppRgb);
Graphics g=Graphics.FromImage(bmp);
g.SmoothingMode=SmoothingMode.AntiAlias;
g.Clear(Color.LightGray);
g.DrawRectangle(Pens.Blue,0,0,width-1,height-1);
g.DrawString(
"我是ASP.NET",rectangleFont,
SystemBrushes.WindowText, new PointF(10,40));
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
bmp.Dispose();
Response.Flush();
}
}
示例运行结果如图17-1所示。
在上面的代码中,首先将Response对象的ContentType属性设置为image/jpeg,以便将整个页呈现为一幅JPEG图像。再调用它的Clear方法来确保不会将无关的内容与此响应一同发送。将它的BufferOutput属性设置为true,从而使该页在完全处理之后再发送到请求客户端。与此同时,并创建两个用于绘制矩形的对象,即Bitmap和Graphics对象。在该页中创建的变量将作为绘制矩形的坐标和在最大的矩形中显示的字符串。
图 17-1 示例运行结果
在绘制矩形和在矩形中显示的字符串时,通过语句“bmp.Save(Response.OutputStream, ImageFormat.Jpeg)”将Bitmap保存到与OutputStream属性关联的Stream对象,并将其格式设置为JPEG。之后调用Dispose来释放资源,这些资源为两个绘制对象所使用。最后,调用Flush方法将缓冲的响应发送到请求客户端。