现在的位置: 首页 > 综合 > 正文

IHttpModule 系列一 入门

2013年10月04日 ⁄ 综合 ⁄ 共 1829字 ⁄ 字号 评论关闭

概述

我们知道HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。

HttpHandlerHttpModule简单来说其实都是对一个请求上下文的处理,但它们两个所处的功能角色是完全不一样的.

 

SimpleHttpModule 类的代码如下:

using System;
using System.Text;
using System.Web;

namespace Phone.HttpModule
{
 /// <summary>
 /// SimpleHttpModule 的摘要说明。
 /// </summary>
 public class SimpleHttpModule : IHttpModule
 {
  #region IHttpModule 成员
  public void Dispose()
  { }
  public void Init(HttpApplication context)
  {
   context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
  }
  void context_AcquireRequestState(object sender, EventArgs e)
  {
   // 获取应用程序
   HttpApplication application = (HttpApplication)sender;
   if(application.Context.Request.Url != null)
   {
    application.Response.Write(application.Context.Request.Url.ToString());
    application.Response.End();
   }
   if(application.Context.Request.UrlReferrer != null)
   {
    application.Response.Write(application.Context.Request.UrlReferrer.ToString());
   }  
//   // 检查用户是否已经登录
//   if (application.Context.Session["UserName"] == null || application.Context.Session["UserName"].ToString().Trim() == "")
//   {
//    // 获取Url
//    string requestUrl = application.Request.Url.ToString();
//    string requestPage = requestUrl.Substring(requestUrl.LastIndexOf('/') + 1);
//    // 如果请求的页面不是登录页面,刚重定向到登录页面。
//    if (requestPage != "Login.aspx")
//     application.Server.Transfer("Login.aspx");
//   }
//   else
//   {
//    // 已经登录,向每个请求的页面打印欢迎词。
//    application.Response.Write(string.Format("欢迎您!{0}!", application.Context.Session["UserName"]));
//   }

  }
  #endregion
 }
}

最后在应用此类的web 项目中要添加应用,并在web.config中加入如下配置

<httpModules>
      <add type="Phone.HttpModule.SimpleHttpModule,Phone.HttpModule" name="SimpleHttpModule" />
     </httpModules>

 

type="Phone.HttpModule.SimpleHttpModule,Phone.HttpModule" 命名空间.类名,命名空间, name=类名 就行了

 

这是基本的一个处理过程,要实现其它复杂的业务逻辑可以加在里面了

 

抱歉!评论已关闭.