宝玉

专注于web开发技术
随笔 - 114, 评论 - 1517 , 引用 - 583

妙用Asp.Net中的HttpHandler

很多时候,我们新建一个xxx.aspx页和xxx.aspx.cs文件,不过是为了实现一个很简单的功能,如:输出xmlDom,注销并跳转,并没有什么html的输出,很是麻烦,需要新建一个页,删除多余的html,并在page_load里面写处理代码。而使用HttpHandler就不需要这么麻烦了。

可以用任何符合公共语言规范 (CLS) 的语言编写自定义 HTTP 处理程序来处理特定的、预定义类型的 HTTP 请求。响应这些特定请求的是在 HttpHandler 类中定义的可执行代码,而不是常规的 ASP 或 ASP.NET Web 页。HTTP 处理程序向您提供一种方法,使您可以与 IIS Web 服务器的低级别的请求和响应服务交互,同时提供极其类似于 ISAPI 扩展但编程模型较为简单的功能。

例如我现在需要实现一个注销并跳转的Logout.aspx页面,下面的示例主要实现了响应客户端对名为 logout.aspx 的页的请求,实现注销并跳转。对 logout.aspx 的所有请求均由包含在程序集 WebUC.dll 中的命名空间 WebUC.HttpHandler 中的 LogoutHttpHandler 提供服务。

修改web.config,在<system.web></system.web>中增加如下脚本:
<httpHandlers>
 <add verb="GET" path="Logout.aspx" type="WebUC.HttpHandler.LogoutHttpHandler, WebUC" />
</httpHandlers>
其中WebUC.HttpHandler.LogoutHttpHandler是我要实现Logout.aspx功能的类,WebUC是我web项目的dll。(具体介绍可以参阅msdn)

下面是LogoutHttpHandler的代码,继承借口,重写方法和属性。

using System;
using System.Web;
using System.Web.Caching;
using System.Web.Security;

namespace WebUC.HttpHandler
{

 public class LogoutHttpHandler : IHttpHandler
 {
  /// <summary>
  /// 通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。
  /// </summary>
  /// <param name="context">HttpContext 对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。 </param>
  public void ProcessRequest (HttpContext context)
  {
   FormsAuthentication.SignOut();
   context.Response.Redirect("Login.aspx",true);
  }

  /// <summary>
  /// 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
  /// </summary>

  public bool IsReusable
  {
   get
   {
    return false;
   }
  }
 }

 }
}

编译后,我就可以直接使用http://***/logout.aspx 来实现注销了,而实际上,我的web目录下并没有logout.aspx这个文件,同样,这个技巧可以用在很多方面,例如防止盗链,下载统计等。

 

发表于 2004年6月8日 15:35

评论

# re: 妙用Asp.Net中的HttpHandler

明白了,明白BLOG中的这些原理呀
2004-6-8 19:33 | 铁匠

# re: 妙用Asp.Net中的HttpHandler

好文!

曾经看过MSDN的相关描述,云中雾中的感觉

所以就放弃了。。。
2004-6-11 20:51 | xlfancy

# re: 妙用Asp.Net中的HttpHandler

good
2004-7-16 17:46 | gg

# re: 妙用Asp.Net中的HttpHandler

感觉宝玉写的每一篇文章,都是精品。
虽然内容不多,但是都能够起到“画龙点睛”的作用
2005-5-8 21:46 | tt

# re: 妙用Asp.Net中的HttpHandler

谢谢宝玉
2005-11-18 4:08 | zhangjiansharp

# re: 妙用Asp.Net中的HttpHandler

2006-5-3 1:37 | 赌东道

# re: 妙用Asp.Net中的HttpHandler

宝玉应该去做MSDN一级讲师!云里雾里的东西总是讲到了关键!俺崇拜你!
2006-7-8 7:12 | heweitykc

# 妙用Asp.Net中的HttpHandler

不用写aspx文件,直接写处理程序,可以用在统计/退出/防盗链等功能
2006-10-27 11:39 | 程序员niuniu

# re: 妙用Asp.Net中的HttpHandler

不错,学到东西了。
2006-12-4 22:27 | 早起的虫子

# re: 妙用Asp.Net中的HttpHandler

thanks
2007-1-15 0:18 | luckbird

# re: 妙用Asp.Net中的HttpHandler

感觉不好.用这个不好.
这个用在防资方面有用
2007-1-16 21:52 | lovebanyi

# re: 妙用Asp.Net中的HttpHandler

虽然你是我学长
但是我还是觉得你不要浪费别人的时间 特别是深夜里到处找资料的时候
2007-1-22 12:00 | SD

# cs中的HttpHandler

参考: 妙用Asp.Net中的HttpHandler HttpHandler HttpModule 做出属于自己的后缀的网页 ! Community Server专题四:HttpHandler
2007-3-25 12:01 | 芝麻小站

# 妙用Asp.Net中的HttpHandler

http://www.webuc.net/dotey/archive/2004/06/08/966.aspx妙用Asp.Net中的HttpHandler 很多时候,我们新建一个xxx.aspx页和...
2007-7-24 9:14 | new2008

Post Comment

主题  
姓名  
主页
校验码  
内容   
京ICP备 05050892号