日期:2010-07-11 浏览次数:20463 次
HttpHandler实现了ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。
看图先:
在ASP.NET 管道处理的末端是HTTP Hander,其实每个Asp.net的Page都实现了IHttpHander,在VS.net中的对象察看器中你可以证实这一点
具体的类是这样定义的:public class Page : TemplateControl, IhttpHandler。
接口IHttpHandler的定义如下:
interface IHttpHandler
{
void ProcessRequest(HttpContext ctx);
bool IsReuseable { get; }
}
接口中ProcessRequest是添加自己的代码进行相应处理的地方。IsReuseable属性指明该HttpHandler的实现类是否需要缓存。
在CS中有很多继承IHttpHandler接口的类,我取出有代表性而又容易理解的一个做分析:找到CommunityServerComponents项目Components目录下的Redirect.cs文件,内容如下:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
// Copyright (c) Telligent Systems Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
using System;
using System.Web;
namespace CommunityServer.Components
{
/**//// <summary>
/// Summary description for Redirect.
/// </summary>
public class Redirect : IHttpHandler
{
public Redirect()
{
//
// TODO: Add constructor logic here
//
}
public void ProcessRequest(HttpContext context)
{
string url = context.Request.QueryString["u"];
if(!Globals.IsNullorEmpty(url))
{
context.Response.Redirect(url);
}
else
{
context.Response.Redirect(Globals.GetSiteUrls().Home);
}
context.Response.End();
}
public bool IsReusable
{
get { return false; }
}
}
}
这里的Redirect功能是在web请求满足HttpHandler配置文件中预设条件下自动拦截执行的,在web.config中<httpHandlers>节点下可以看到
<add verb="GET" path="Utility/redirect.aspx" type="CommunityServer.Components.Redirect, CommunityServer.Components" />
对该类的配置
· verb可以是"GET"或"POST",表示对