我很惊讶在MvcApplication.Init中,Modules集合中只有一个条目,名为“__ASP_IntegratedDynamicModule_Shim”.在我的webforms应用程序中,大约有13个模块,其中一个是“FormsAuthentication”.
在我的webforms应用程序中,我重写HttpApplication.Init,然后使用Modules [“FormsAuthentication”]来获取FormsAuthenticationModule并连接到其Authenticate事件以替换我自己的处理程序.我现在不知道如何做到这一点,我正在转向MVC 3.
表单auth模块显然在我的管道中运行,因为身份验证模式=“表单”工作正常(我可以使用标准的FormsAuthentication技术登录和注销).我正在使用带有集成ASP.NET 4.0管道的IIS 7.
还有人注意到这个吗?我可能只是在做一些非常愚蠢的事情……
最佳答案 在集成管道中,您的Init()方法将多次运行.由于MVC 3将自身挂钩到ASP.NET管道的方式,对Init()的第一次调用可能包含一个空模块集合.后续调用应包含您正在寻找的模块.
我建议修改你的Init()代码,说明模块[“FormsAuthentication”]是否不存在,no-op.您的代码最终将再次被调用,您最终将能够挂钩该事件.