基于HttpModule扩展

一般处理页面就是HttpHandler区域

-------------------------------封装类库

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Text.RegularExpressions;
/*
 **************************
 * 案例功能:
 * 1,URL地址栏阻止(参数为aspx则跳转到错误页面)
 * 2,Form表达阻止(表单的值为aspx则弹出错误)
 * 3,阻止使用session
 **************************
 */
namespace HttpModuleDome
{
    public class MyHttpModule : IHttpModule
    {
        #region IHttpModule 成员
        public void Dispose()
        {
        }
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
            context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
        }
        //开始请求阶段
        void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = sender as HttpApplication;
            HttpContext context = application.Context;
            //Url地址栏阻止
            if (context.Request.QueryString.Count > 0)
            {
                for (int i = 0; i < context.Request.QueryString.Count; i++)
                {
                    if (context.Request.QueryString[context.Request.QueryString.Keys[i]] == "aspx")
                    {
                        context.Response.Redirect("http://www.baidu.com");
                        context.Response.End();
                    }
                }
            }
            //Form表单阻止
            if (context.Request.Form.Count > 0)
            {
                for (int i = 0; i < context.Request.Form.Count; i++)
                {
                    if (context.Request.Form[context.Request.Form.Keys[i]] == "aspx")
                    {
                        context.Response.Write("<script>alert(‘错误‘);location.href=‘" + context.Request.RawUrl + "‘</script>");
                        context.Response.End();
                    }
                } 
            }
        }
        //进入了HttpHandler区域,已经有了session
        void context_AcquireRequestState(object sender, EventArgs e)
        {
            HttpApplication application = sender as HttpApplication;//Global.asax的基类
            HttpContext context = application.Context;//封装了ASP.NET要处理的单次请求的所有信息
            if (context.Session.Count > 0)
            {
                //context.Response.End();//直接跳过AcquireRequestState之后的请求,结束请求
                
            }
        }
        #endregion
    }
}

------------------------------------web.config里面引用

 <system.web>  
 <httpModules>

   <add name="MyhttpModule" type="HttpModuleDome.MyHttpModule,HttpModuleDome"/>

  </httpModules>

 </system.web>

------------------------------------也可以在Global.asax文件里面写

<%@ Application Language="C#" %>
<script runat="server">
    /*
     *格式:以Application_开头
     */
    //开始请求阶段
    void Application_BeginRequest(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
    }
    
    
    void Application_Start(object sender, EventArgs e) 
    {
        // 在应用程序启动时运行的代码
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //  在应用程序关闭时运行的代码
    }
        
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码
    }
    void Session_Start(object sender, EventArgs e) 
    {
        // 在新会话启动时运行的代码
    }
    void Session_End(object sender, EventArgs e) 
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
        // 或 SQLServer,则不会引发该事件。
    }
       
</script>

时间: 2024-10-12 20:06:02

基于HttpModule扩展的相关文章

基于 Paraview 扩展与实现——(5)

Checkbox类: 1.实现checkbox的全选功能 <script type="text/javascript"> //全选checkbox:1.当全选checkbox勾选,子checkbox(name为'ids'的checkbox)自动全部勾选 // 2.当全选checkbox取消勾选,子checkbox自动全部取消勾选 function checkAll(){ if($("#checkall")[0].checked){ $("inp

基于 Paraview 扩展与实现——(2)

Paraview程序的架构 Paraview 支持多种数据格式和显示方式,目前包括网格绘制,面绘制,体绘制等方法.若要扩展 Paraview 的功能,必须了解其绘制的固定流水线,并且必须要编写符合 Paraview 接口规范的代码. 可视化包含三个基本的步骤:数据读取,数据过滤和数据渲染.首先,数据需要被读取到可视化应用程序 ParaView 中:接着,根据分析需要选择若干种过滤器来处理这些数据以获得具有某种特定形式的子数据集数据特征.最后,在用户窗口界面中,将这些数据特征以一种形象的和直观的图

基于 Paraview 扩展与实现——(3)

一.起因 最近在玩Boost库.当然首先是要进行Booist库的安装和配置.于是浅墨Google了一下boost库的安装配置攻略,下载了最新版1.55的boost库,就愉悦地开始进行配置了. 当进行到第五步,要在VS命令提示符中运行bootstrap.bat的时候,问题就来了,按着攻略打开Visual Studio2010命令提示符,就迎面报错: "Setting environment for using MicrosoftVisual Studio. 此时不应有\Mirosoft"

基于PHP扩展一种处理Emoji方法的类库介绍【Carmela】

Carmela介绍 Carmela提供基于PHP,PHP扩展,JAVA,C++等语言的一套处理4四节UTF-8解决方案,比如常见Emoji标签支持 背景: UTF-8格式含有Emoji表情字符串直接插入数据库,如果数据库未做调整会提示报错,通过更改数据库和表的字符集为utf8mb4_general_ci,可以避免这种问题.但是,在很多大型系统和架构中,修改数据库的字符集可能会引发很多的问题,比如PC端展示,新老数据兼容问题.针对这类问题,还有另外一种解决方案,入库前替换,出库后根据客户端类型做反

基于 Paraview 扩展与实现——(6)

2.1 图形模型 VTK的图形模型和实现类 VTK的图形模型,主要有以下几个核心类组成: 1)渲染交互器:实现用户和渲染窗口之间的交互操作. 2)渲染窗口(RenderW indow):实现类为 vtk RenderW indow. 3)渲染器( Render ):实现类为 vtkRe nder. 4)灯光(Light):实现类为 vtkLight . 5)相机(Ca mera):实现类为 vtkCamera . 6)角色( Ac tor):实现类为 vtkActor. 7)属性(Propert

【设计模式+原型理解】第二章:基于构造函数扩展出来的原型模式

在第一章的时候,说过了单例模式.工厂模式.构造函数模式,你还记得构造模式是怎么样的吗? function CreateJsPerson(name, age) { this.name = name; this.age = age; this.writeJs = function() { console.log("my name is " + this.name + ", i can write js."); } } var p1 = new CreateJsPerso

开源代码生成器,基于mybatis-generator扩展,结合freemarker

git源码地址:https://github.com/JonSnow592622272/free-generator-code 码云gitee源码地址:https://gitee.com/a592622272/free-generator-code(只从git同步过来) 1:什么是free-generator-code. free-generator-code是一个基于mybatis-generator扩展并结合freemarker的代码生成器. 2:为什么使用free-generator-co

基于android-uitableview扩展-uilistview项目

这个项目是正如标题说的那样,是基于uitableview项目为基础进行二次封装的,目的是实现更多的展现形式,项目地址:点击打开 不过,这个使用起来你还必须得会用uitableview扩展(项目地址:点击打开),如果这个你会了那么基本上该项目就是在标签内加入一些项目定义的属性,比如: <com.shelwee.uilistview.ui.UiListView android:id="@+id/uilist3" android:layout_width="match_par

【EXCEL终极总结分享】基于NPOI扩展封装的简易操作工具类库(简单灵活易用,支持导出、导入、上传等常见操作)

对于EXCEL的导入.导出,我之前已分享过多次,比如: 第一种方案:<我写的一个ExcelHelper通用类,可用于读取或生成数据>这个主要是利用把EXCEL当成一个DB来进行获取数据,导出则是采用拼接成HTML TABLE的方式,这种在ASP.NET,ASP.NET CORE 中也是可以的,简单方便,依赖Office Excel组件,仅适用于网站服务端. 推荐指数:♥♥♥ 第二种方案:<MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult&g