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文件中注册了

     

  • 相关阅读:
    VS2015使用scanf报错解决方案
    C++的标准模板库(STL)简介
    C++中常用特殊符号简介(& , * , : , :: , ->)
    C++中#include <xxx.h>和#include "xxx.h"的区别(尖括号和双引号的区别)
    C++中#include的工作原理
    opencv中Mat与IplImage,CVMat类型之间转换
    C++数据类型简析
    让你在DOS中任意切换目录
    七种Prolog解释器/编译器
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/mibing/p/7657862.html
Copyright © 2011-2022 走看看