如何使用HttpModule来实现我们日常的应用:

1、向每个页面动态添加一些备注或说明性的文字:
            有的网站每一个页面都会弹出一个广告或在每个页面都以注释形式(<!-- -->)加入网站的版权信息。如果在每个页面教编写这样的JS代码的话,对于大一点的网站,这种JS代码的编写与维护可是一个很繁琐枯燥的工作。
            有了HttpModule我们就可以很简单地解决这个问题了。HttpModule是客户端发出请求到客户端接收到服务器响应之间的一段必经之路。我们完全可以在服务器处理完请求之后,并在向客户端发送响应文本之前这段时机,把这段注释文字添加到页面文本之后。这样,每一个页面请求都会被附加上这段注释文字。
            这段代码究竟该在哪个事件里实现呢? PostRequestHandlerExecute和PreSendRequestContent之间的任何一个事件都可以,但我比较喜欢在EndRequest事件里编写代码。
            第一步:创建一个类库(程序集名称)LibraryModule。
            第二步:编写一个类实现IHttpModule接口
                namespace NamespaceModule
      {
          public class ClassModule : IHttpModule
           {   
         

    第三步:在Init事件中注册EndRequest事件,并实现事件处理方法
               public class ClassModule : IHttpModule
                {
                    public void Dispose(){}
                    public void Init(HttpApplication context)
                    {
                        context.EndRequest = new EventHandler(context_EndRequest);
                    }
                    void context_EndRequest(object sender, EventArgs e)
                    {
                        HttpApplication ha = (HttpApplication)sender;
                        ha.Response.Write("<!--这是每个页面都会动态生成的文字。--grayworm-->");
                    }
                }
            第四步:在Web.Conofig中注册一下这个HttpModule模块
          
<httpModules>
           <add name="ClassModule" type="NamespaceModule.ClassModule,LibraryModule"></add>
          </httpModules>
          name:模块名称,一般是类名
          type:有两部分组成,前半部分是命名空间和类名组成的全名,后半部分是程序集名称,如果类是直接放在App_Code文件夹中,那程序名称是App_Code。
                这样在Web站点是添加该类库的引用后,运行每个页面,会发现其源文件中都会加入“<!--这是每个页面都会动态生成的文字。--grayworm-->”这句话。同样的方法你也可以在其中加入JS代码。

2、身份检查
            大家在作登录时,登录成功后,一般要把用户名放在Session中保存,在其它每一个页面的Page_Load事件中都检查Session中是否存在用户名,如果不存在就说明用户未登录,就不让其访问其中的内容。
            在比较大的程序中,这种做法实在是太笨拙,因为你几乎要在每一个页面中都加入检测Session的代码,导致难以开发和维护。下面我们看看如何使用HttpModule来减少我们的工作量
            由于在这里我们要用到Session中的内容,我们只能在AcquireRequestState和PreRequestHandlerExecute事件中编写代码,因为在HttpModule中只有这两事件中可以访问Session。这里我们选择PreRequestHandlerExecute事件编写代码。
            第一步:创建一个类库ClassLibrary831。
            第二步:编写一个类实现IHttpModule接口
                class TestModule:IHttpModule
                {
                    public void Dispose()
                    {
                    }
                    public void Init(HttpApplication context)
                    {
                    }
                }
            第三步:在Init事件中注册PreRequestHandlerExecute事件,并实现事件处理方法
               class AuthenticModule:IHttpModule
                {
                    public void Dispose(){}
                    public void Init(HttpApplication context)
                    {
                        context.PreRequestHandlerExecute = new EventHandler(context_PreRequestHandlerExecute);
                    }
                    void context_PreRequestHandlerExecute(object sender, EventArgs e)
                    {
                        HttpApplication ha = (HttpApplication)sender;
                        string path = ha.Context.Request.Url.ToString();
                        int n = path.ToLower().IndexOf("Login.aspx");
                        if (n == -1) //是否是登录页面,不是登录页面的话则进入{}
                        {
                            if (ha.Context.Session["user"] == null) //是否Session中有用户名,若是空的话,转向登录页。
                            {
                                ha.Context.Response.Redirect("Login.aspx?source=" path);
                            }
                        }
                    }
                }
            第四步:在Login.aspx页面的“登录”按钮中加入下面代码
                protected void Button1_Click(object sender, EventArgs e)
                {
                    if(true)    //判断用户名密码是否正确
                    {
                        if (Request.QueryString["source"] != null)
                        {
                            string s = Request.QueryString["source"].ToLower().ToString();   //取出从哪个页面转来的
                            Session["user"] = txtUID.Text;
                            Response.Redirect(s); //转到用户想去的页面
                        }
                        else
                        {
                            Response.Redirect("main.aspx");    //默认转向main.aspx
                        }
                    }
                }
            第五步:在Web.Conofig中注册一下这个HttpModule模块
          
<httpModules>
           <add name="TestModule" type="ClassLibrary831.TestModule,ClassLibrary831"></add>
          </httpModules>


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8中的java.util.Random

Java 8中java.util.Random类的简洁功能之一是对其进行了改进&#xff0c;现在可以返回随机的数字流 。 例如&#xff0c;要生成一个介于0&#xff08;含&#xff09;和1&#xff08;不含&#xff09;之间的随机双精度数的无限流&#xff1a; Random random new Random(); Do…

appium判断元素是否存在_Python+selenium自动化之判定元素是否存在

在测试过程中&#xff0c;我碰到过这类的问题&#xff0c;使用find_element却找不到某个元素而产生异常&#xff0c;这就需要在操作某个元素之前判定该元素是否存在&#xff0c;而selenium中没有判定元素是否存在的方法&#xff0c;或者判定相同的元素有几个&#xff0c;需要操…

棋盘DP三连——洛谷 P1004 方格取数 洛谷 P1006 传纸条 Codevs 2853 方格游戏

P1004 方格取数 题目描述 设有N $\times N$NN的方格图(N $\le 9$)(N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字00。如下图所示&#xff08;见样例&#xff09;: A0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 …

html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

this.p{ m:2,b:2,loftPermalink:,id:fks_082065087087086069087082087095083084084067083083082065,blogTitle:HTML图片CSS滤镜—灰度效果,blogAbstract: ,blogTag:html,blogUrl:blog/static/72507542200941384735902,isPublished:1,istop:false,type:2,modifyTime:13288029920…

将动态aspx页面转换成为静态html页面的几种方法

1. 模版法 该方法历史悠久&#xff0c;具体处理流程为采用一个html模版&#xff0c;将其中的关键字替换为我们希望的信息。 优点: 缺点: 所有的信息都要采取字符串批凑的方式来实现&#xff0c;比如需要一个列表&#xff0c;就需要拼凑字符串。问题是开发周期长&…

SSH协议详解

简介 SSH只是一个协议&#xff0c;基于这个协议有不同的实现&#xff0c;这些实现中有开源&#xff0c;也有收费。 原理 普通网络通信一般是明文通信&#xff0c;数据容易被中间人拦截并且解析&#xff0c;而SSH协议则提供了基于内容加密服务。 流程&#xff1a; 第一种&#x…

怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

「谁用激光雷达&#xff0c;谁完蛋&#xff01;」在去年特斯拉举办的 Autonomy Day 上&#xff0c;特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达。「昂贵的传感器是不必要的&#xff0c;这就像是一大堆昂贵的附属品。」「像阑尾一样。一个阑尾不好——那么&#xff0c;一大堆阑…

JBoss Fuse 6.1 + HawtIO第一部分

它是开源的&#xff01; JBoss Fuse是开源ESB &#xff0c;是Red Hat收购FuseSource之后Fuse ESB的发展。 它是开源的 &#xff0c; Apache v2许可的 &#xff0c; 并由Red Hat完全支持 。 最好的部分之一是&#xff0c;您可以免费下载并使用它&#xff0c;并且在生产或订阅中支…

html5新增的js api,对HTML5新增JS Api的思考

1.为什么javascript的变量名不使用css中的命名方法&#xff0c;而选择使用驼峰命名法因为在javascript中“-”表示减法&#xff0c;所以如果使用“-”的话会出现不必要的问题。2.在javascript中已经有className方法添加类名&#xff0c;为什么还要新增加classList.add方法因为c…

什么是URL转发和一个IP建多个Web站点--主机头名法

什么是URL转发&#xff1f; 所谓 URL 转发&#xff0c;是中企资源对在中企资源注册的域名&#xff0c;所提供的一项特别的域名增值服务&#xff0c;此服务是通过中企资源服务器的特殊技术设置&#xff0c;实现当访问您的域名时&#xff0c;将会自动跳转到您所指定的另一个网络地…

eval()

eval() 接收一个字符串&#xff0c;这个字符串必须是一个表达式&#xff0c;然后执行并返回表达式的值 In [6]: x 7In [7]: eval(3 x) Out[7]: 10 In [8]: eval(pow(2, 3)) Out[8]: 8 In [9]: eval(2 3) Out[9]: 5 转载于:https://www.cnblogs.com/pzk7788/p/10264105.h…

ajax html页面传参数,jQuery AJAX:如何将大型HTML标记作为参数传递?

如何使用jQuery AJAX将大型HTML标记数据传递给我的PHP&#xff1f;当我收到结果时&#xff0c;这是错误的。jQuery AJAX代码&#xff1a;$(#saveButton).click(function() {// do AJAX and store tree structure to a PHP array//(to be saved later in database)var treeInner…

使用Drools 6.0进行部署

KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系&#xff1b; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上进行部署&#xff0c;也可以在运行时动态进行…

activemq安装与配置_ActiveMQ(消息队列)从入门到了解

一、 ActiveMQ 简介 1 什么是 ActiveMQ ActiveMQ 是 Apache 出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现&#xff0c;尽管 JMS 规范出台已经是很久 的事情了&#xff0c;但是 JMS 在当…

httpHandlers和httpModules接口介绍 (5)

IHttpHandler工厂 class TestHandlerFactory : IHttpHandlerFactory{public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated){string fname url.Substring(url.IndexOf(/) 1);while (fname.IndexOf(/) ! -1)fname …

P4336 [SHOI2016]黑暗前的幻想乡

题目 P4336 [SHOI2016]黑暗前的幻想乡 做法 每种颜色恰好一条边&#xff0c;有点难处理啊 根据套路&#xff0c;数据范围这么小&#xff0c;容斥一下所有的情况就可以了 对每种颜色进行状压&#xff0c;表这次只能选这些颜色&#xff0c;做\(n-1\)的时候会加上多余的东西&#…

智联招聘简历如何导出html,如何将拉勾网(智联招聘)的预览简历导出来

最近在整理简历的时候发现拉勾网/智联招聘上面的预览简历是那么简洁漂亮&#xff0c;可是当我想把他导到本地&#xff0c;发pdf文件给企业时却只能是word&#xff0c;那么的难看&#xff0c;摸索了一会儿找到了一种比较好的方法可以得到预览的简历。1.另存为html文件在这里插入…

Java反编译器的剖析

简单地说&#xff0c;反编译器尝试将源代码转换为目标代码。 但是有很多有趣的复杂性-Java源代码是结构化的&#xff1b; 字节码当然不是。 而且&#xff0c;转换不是一对一的&#xff1a;两个不同的Java程序可能会产生相同的字节码。 我们需要应用启发式方法&#xff0c;以合理…

Mybatis注解开发模糊查询

Mybatis注解开发模糊查询 一般在使用mybatis时都是采用xml文件保存sql语句 这篇文章讲一下在使用mybatis的注解开发时&#xff0c;如何进行模糊查询 模糊查询语句写法&#xff08;在Select注解中&#xff09;&#xff1a; where field like CONCAT(%,#{keyWord},%) 下面是一些错…

JS中深浅拷贝 函数封装代码

一、了解 基本数据类型保存在栈内存中&#xff0c;按值访问&#xff0c;引用数据类型保存在堆内存中&#xff0c;按址访问。 二、浅拷贝 浅拷贝只是复制了指向某个对象的指针&#xff0c;而不是复制对象本身&#xff0c;新旧对象其实是同一内存地址的数据&#xff0c;修改其中…