zoukankan      html  css  js  c++  java
  • 如何使用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>

  • 相关阅读:
    032 Gradle 下载的依赖jar包在哪?
    031 can't rename root module,Android Studio修改项目名称
    030 Cannot resolve symbol'R' 问题解决汇总大全
    029 Android Studio层级显示目录文件
    028 You are about to commit CRLF line separators to the Git repository.It is recommended to set the core. autocrlf Git attribute to true to avoid line separator issues If you choose Fix and Comit ,
    027 【Android基础知识】Android Studio 编译慢及 Adb connection Error:远程主机强迫关闭了一个现有的连接
    026 Android Studio 和Gradle版版本对应关系
    025 Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm
    024 Android Studio上传项目到Github 最全记录
    023 解决AndroidStudio下载gradle慢的问题
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2034279.html
Copyright © 2011-2022 走看看