zoukankan      html  css  js  c++  java
  • 请求上下文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文件中注册了

     

  • 相关阅读:
    MAC OSX 下 使用openssl 命令 生成RSA公钥和私钥
    iOS 高效开发-----延时执行用GCD
    iOS 高效开发-----实现description 方法 (续)
    iOS 高效开发-----实现description 方法
    ios 高效开发-----字面量
    利用脚本打包的动态库 在打包发布时出现得问题解析 ERROR ITMS-90362等
    打包framework 涉及到得架构问题
    XCode 6 制作framework
    【Mac软件推荐】终端常用者的萌物Go2Shell
    项目总结吧
  • 原文地址:https://www.cnblogs.com/mibing/p/7657862.html
Copyright © 2011-2022 走看看