利用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注册的位置是不同的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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; } } |
分类:
开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端