zoukankan      html  css  js  c++  java
  • 利用Feature receiver自动注册/卸载Http Module

    最近做了一个项目,里面有一个根据用户AD属性进行页面跳转的需求,通常的实现方法是在首页增加一个Web Part,在里面去做一些逻辑处理,不过我认为这样效率不高,因为:

    1. 首先有个跳转页面,每次访问,都会对这个跳转页面进行解析,然后跳转到目的页面,这样为了访问一个页面,就需要等待2个页面加载。

    2. 不利于扩展。如果用户需求变更,针对访问其他页面的时候也要做额外的身份验证,那把这样一个web part放到所有页面就显得不现实了。

    所以我选择使用Http Module,针对HttpRequest,在页面加载前进行处理。对于Http Module,注册需要写到对应的web.config文件中。就需要使用一种能够自动化的方式实现,这里就需要编程的方法操作Web.config文件

    以下代码实现一个Feature receiver(Scope需要设置为WebApplication),在激活feature的时候去注册Http Module,反激活时候去卸载。

    实现的时候需要注意II6和IIS7注册的位置是不同的

        public class DemoFeatureEventReceiver : SPFeatureReceiver
        {
            public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                SPWebApplication WebApp = (SPWebApplication)properties.Feature.Parent;
                WebApp.WebConfigModifications.Add(CreateHttpModuleModification());
                WebApp.WebService.ApplyWebConfigModifications();
                WebApp.WebService.Update();
            }
    
            public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
                SPWebApplication WebApp = (SPWebApplication)properties.Feature.Parent;
                WebApp.WebConfigModifications.Remove(CreateHttpModuleModification());
                WebApp.WebService.ApplyWebConfigModifications();
                WebApp.WebService.Update();
            }
    
            public SPWebConfigModification CreateHttpModuleModification()
            {
                SPWebConfigModification modification;
                string ModName = "add[@name='DemoHttpModule']";
                //IIS 6
                //string ModXPath = "configuration/system.web/httpModules";
                //IIS 7
                string ModXPath = "configuration/system.webServer/modules";
                modification = new SPWebConfigModification(ModName, ModXPath);
                modification.Owner = "Lambert Qin";
                modification.Sequence = 0;
                modification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
                modification.Value = String.Concat("<add name=\"DemoHttpModule\" type=\"", GlobalVariables.DemoHttpModule_ASSEMBLY_NAME, "\" />");
                return modification;
            }
    
    
        }
  • 相关阅读:
    Laravel 学习笔记之文件上传
    Composer学习
    Laravel 学习笔记之数据库操作——Eloquent ORM
    PHP至Document类操作 xml 文件
    使用promise构建一个向服务器异步数据请求
    遍历DOM树
    关于tp验证码模块
    layui 封装自定义模块
    js进阶之路,关于UI资源的优化(转载)
    关于js 重载
  • 原文地址:https://www.cnblogs.com/lambertqin/p/1950987.html
Copyright © 2011-2022 走看看