这段时间学习HttpModule,用HttpMoudule写了一个判断权限登录的模块,网上很多,这里不介绍了。我写的代码如下
但出现这样的一个问题,就是像图片,*.css,*.js等文件被请求了,或静态的*.html,导致程序代码出错
(一)可能出现的现象
(1)首次访问测试页面Test.aspx能跳转到Login.aspx页,但是Login.aspx页面中的图片不能加载,并且报js错误(Login页面中有简单的js判断语句),请问各位大大是什么原因造成的啊
(2) if (context.Session["userId"] == null || context.Session["userId"].ToString().Trim() == "") 将出现“未将对象引用设置到对象的实例。” 主要是HttpModule处理.aspx后,还要处理资源文件,第二次执行Session就为空了,如果处理的*.apx页面中没有资源文件,就不会出现第二次请求了。
(3)这也是为什么有人问,好像死循环了,页面被重复执行了,是的,就是因为你页面有资源文件所导致的。
(二)原因
(1)Http模块必须是IIS将请求调度给 aspnet_isapi.dll ISAPI 扩展后才能发挥作用,默认下图片、CSS、JS等请求IIS都是直接返回的,并不给aspnet_isapi.dll处理,Http模块就不会发生作用。
(2)你用iis访问页面就不会过滤图片,js,css 了发布到iis后,图片,css,js就都不会经过httpmodule了,如果你是用vs的 developmentserver 请求 那图片还有css,js会有问题,httpmodule只拦截那些在iis应用程序配置中项关联的后缀文件,像aspx,asmx,ascx
(三)解决办法(参考了下网上的资料)
(1)有上面的原因,可以知道解决的办法,就是发布后,而不是开发环境( developmentserver 请求 )。直接用IIS即可。
(2) HttpModule默认处理aspx页面没有问题,但是如果在IIS上配置html也通过HttpModule处理时会出现死循环无法跳出html页面的问题,在web.config上加上<add verb="*" path= "*.htm" type= "System.Web.StaticFileHandler"/></httpHandlers>
可解决。
个人意见仅供参考,希望给那些跟我碰到一样问题人带来点帮助!请大家指正
参考网址 http://www.cnblogs.com/qiufankaka/archive/2009/09/14/httpmodule.html