请求上下文HttpContext解释

1 HttpContext上下文作用

   有关应用程序状态信息,处理的请求以及构建的响应等信息全部通过HttpContext上下文获取

2 Httpcontext类用于从头至尾跟踪请求的状态,他也是有关请求的所有可用信息(包括httpRequest和httpResponse对象)的通道

3 模块

  模块将实现System.web.IHttpModule接口,System.web.IHttpModule接口有两个方法

   Init(app):实例化模块类并将其传递给HttpApplication实例时,调用此方法。使用此方法可为HttpApplication事件注册处理程序方法。

  Dispose()  在完成请求处理后调用此方法

模块将在新建HttpApplication对象时进行实例化,每个HttpApplication对象都会获取它自己的一组模块对象,在实例化模块时将调用Init()方法,

和HttpApplication对象一样,模块也可用于处理多个请求(但一次只处理一个请求)

 

4 如何创建自定义的模块

创建一个实现IHttpModule的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Events
{
    /// <summary>
    /// 模块功能,防止未通过身份验证的用户访问指定的窗体
    /// </summary>
    public class ParamsModule : IHttpModule
    {
        public void Dispose()
        {
            
        }

        public void Init(HttpApplication app)
        {
            app.PostAuthenticateRequest += (src, args) => 
            {
                if (app.Request.Url.LocalPath=="/Params.aspx"&&!app.User.Identity.IsAuthenticated)
                {
                    app.Context.AddError(new UnauthorizedAccessException());
                }
            };
        }
    }
}


 第二部注册自定义的模块(asp.net framework不会自动搜索模块类),使它成为生命周期的一部分,在web.config文件中注册

  <system.webServer>
    <modules>
      <add name="ParamsProtecttion" type="Events.ParamsModule"/>
    </modules>
  </system.webServer>

 

如何让模块自动注册到asp.net framework,而不用使用配置?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

//特性告诉asp.net fromework他应在应用程序启动时调用ModuleRegistration类中的RegisterModules方法
[assembly:PreApplicationStartMethod(typeof(CommonModules.ModuleRegistration), "RegisterModules")]
namespace CommonModules
{
    public  class ModuleRegistration
    {
        public static void RegisterModules()
        {
            Type[] moduleTypes =
            {
                typeof(CommonModules.TimerModule),
                typeof(CommonModules.LogModule)
            };

            foreach (Type item in moduleTypes)
            {
                HttpApplication.RegisterModule(item);
            }
        }
    }
}

这样就不用在web.config文件中注册了

 

posted @ 2017-10-12 20:15  白羽轻飘  阅读(2144)  评论(0编辑  收藏  举报