C# ASP.NET的一个很简单的问题。。请高手帮忙。小弟无尽感激(34)//IHttpHandler 问题

如下是小弟不明白的地方。多谢高手们的帮助。。protectedvoidButton1_Click(objectsender,EventArgse){intid=Conve... 如下是小弟不明白的地方。多谢高手们的帮助。。

protected void Button1_Click(object sender, EventArgs e)
{
int id = Convert.ToInt32(TextBox1.Text);
String size = TextBox2.Text;

\\1 这里不明?
Image1.ImageUrl = "Handler.ashx?PhotoID=" + id + "&Size="+ size ;
}

public class Handler : IHttpHandler {
public bool IsReusable {
get {
return true;
}
}

//2 这里传入的参数是什么类型,具体有什么作用?
public void ProcessRequest (HttpContext context)
{
//3、这里不明?
context.Response.ContentType = "image/jpeg";

//4.这不明?不知道这是用来做什么的?
context.Response.Cache.SetCacheability(HttpCacheability.Public);

//5、这里也不明?也不知是用来做什么的?
context.Response.BufferOutput = false;

int size;
//6.Switch里的参数,详细解释清楚?
switch (context.Request.QueryString["Size"])
{
case "S":
size = 1;
break;
case "M":
size = 2;
break;
case "L":
size = 3;
break;
default:
size = 4;
break;
}

Int32 id = -1;
Stream stream = null;
if (context.Request.QueryString["PhotoID"] != null && context.Request.QueryString["PhotoID"] != "")
{
id = Convert.ToInt32(context.Request.QueryString["PhotoID"]);

//获取图片流
stream = GetPhoto(id, size);

}
else
{
id = Convert.ToInt32(context.Request.QueryString["AlbumID"]);
stream = GetFirstPhoto(id, size);
}
// Get the photo from the database, if nothing is returned, get the default "placeholder" photo
if (stream == null)
stream = GetPhoto(size);
// Write image stream to the response stream
const int buffersize = 1024 * 16;
byte[] buffer = new byte[buffersize];
int count = stream.Read(buffer, 0, buffersize);
while (count > 0)
{
context.Response.OutputStream.Write(buffer, 0, count);
count = stream.Read(buffer, 0, buffersize);
}
}
展开
 我来答
liujiaotan
2010-03-17 · 超过33用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:91.9万
展开全部
1、Image1.ImageUrl = "Handler.ashx?PhotoID=" + id + "&Size="+ size ;
Image的控件的src属性会被赋予Handler.ashx?....的地址,Handler.ashx为“一般处理程序”,在此处应用应该是输出图片流数据。
2、public void ProcessRequest (HttpContext context)
参数的类型已经说明了他的作用,HttpContext上下文,提供了一些基本的类型引用,比较熟悉的是Request,Response,Server,Application等等。
3、context.Response.ContentType = "image/jpeg";
设置响应的类型,此处由于是输出图片,所以设置为“image/jpeg”;
4、context.Response.Cache.SetCacheability(HttpCacheability.Public);
用于设置Cache-Control,HttpCacheability是一个枚举类型,详细描述搜索“Cache-Control”、“HttpCacheability”。
5、context.Response.BufferOutput = false;
获取或设置一个值,该值指示是否缓冲输出并在处理完整个页之后发送它。
6、context.Request.QueryString["Size"]
对应 Image1.ImageUrl = "Handler.ashx?PhotoID=" + id + "&Size="+ size 中的Size参数。
pengjianhang
2010-03-17 · TA获得超过296个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:370万
展开全部
1:就是根据 PhotoID=" + id + "&Size="+ size 这两个参数去另一个页面上处理,然后那个页面会返回一个字符串,这个字符串就是一个图片的路径。

2:HttpContext 这个类就代表了一个http请求,集合中包含了该请求的所有对象,比如 request.querystring["PhotoID"];

3:设置网页的输出类型为图片类型。

4:这个是设置缓存的,具体MSDN中很清楚。

5:该值指示是否缓冲输出并在处理完整个页之后发送它

6:就是根据你传递的参数去设置大小,"&Size="+ size,这个就是你的参数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wlfd1234
2010-03-17 · TA获得超过1075个赞
知道小有建树答主
回答量:618
采纳率:0%
帮助的人:513万
展开全部
1,只是一个引用URL,如果我说是index.aspx,你能理解吧?但是如果是index.aspx?id=1呢?就是这个意思,全部路径可能是“~/index.aspx?id=1”

2,HttpContext,你试试加个“.”,里面的一些属性你可以了解一二,起码有几个你绝对知道,试试!

3,既然涉及Type,就是类型,你需要了解一下HTTP协议才行

4,貌似是做一下缓存,你看了会用就行,不用特别理解

5,我确实没用过这个

6,context.Request.QueryString["Size"],这是你的查询字符串,可以获取本页面的查询字符串,比如“index.aspx?id=1”
那么你在index.aspx.cs文件(即后台)中可以:
int id=Request.QueryString["id"];

那么结果是id=1
明白了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
libo586
2010-03-17 · TA获得超过537个赞
知道小有建树答主
回答量:542
采纳率:0%
帮助的人:327万
展开全部
补充1楼
第5个是设置缓冲区的输入输出!!!
false是不使用!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰之泉冰雪
2010-03-17
知道答主
回答量:57
采纳率:0%
帮助的人:0
展开全部
fdgsdgf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式