在前面的几篇文章中介绍了asp.net的窗体身份验证,这种身份验证方式可以让通过验证的用户访问指定的目录,而没有通过验证的用户不能访问该目录下的网页。
但是,有一种例外,就是目录中的html文件例外。例如,在《asp.net中的窗体身份验证(最简单篇)》中介绍的,除了登录网页之外,所有网页都必须在登录之后才能访问,但如果在网站中添加一个HTMLPage.htm文件,访问该文件是不需要身份验证的。如下图所示:
之所以出现这种情况,是由IIS的访问机制决定的。当客户端浏览器向Web服务器发送请求时,Web服务器会对所请求的文件的扩展名进行检查,然后决定由哪个ISAPI扩展处理这个请求,然后将请求传递给该ISAPI扩展。而asp.net事实上也就是一个ISAPI扩展,对于asp1.1而言,这个扩展文件为:C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/aspnet_isapi.dll,对于asp2.0而言,这个扩展文件为:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll。
很不幸的是:asp.net映身的扩展名有.aspx、.ascx、.ashx、.asmx,就是没有.htm和.html。所以,如果受限目录中包括.htm和.html网页时,asp.net是不会对其进行处理的。只要用户可以通过IIS的权限控制,就可以访问这些文件。
找到原因就好办了,如果想要让.htm文件和.html文件也受asp.net控制,那么,就必须添加映射。添加方法如下所示:
1、在IIS中找到网站或虚拟目录,右击,选择属性,打开如下图所示窗口。
2、单击“配置”按钮,弹出下图窗口。
3、单击“添加”按钮,打开如下窗口。
4、在可执行文件中输入“C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/aspnet_isapi.dll”(asp.net1.1)或“c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll”(asp.net 2.0),在扩展名中输入“htm”或“html”,注意前面不用加“.”。然后点确定。
5、重启一下IIS,再访问刚才的html文件,如下图所示,现在要求登录了,而且在URL中也可以看到ReturnUrl参数值为htm文件。
=============================
原创不容易,转载请注明出处。
相关链接:
1、asp.net中的窗体身份验证(最简单篇)
2、asp.net中的窗体身份验证(分目录验证篇)
3、asp.net中的窗体身份验证(完整篇之一:创建asp.net的窗体身份验证方式)
4、asp.net中的窗体身份验证(完整篇之二:asp.net的窗体身份验证过程)
5、asp.net中的窗体身份验证(完整篇之三:用户登录页面)
6、asp.net中的窗体身份验证(完整篇之四:获得用户数据)
7、asp.net中的窗体身份验证(完整篇之五:退出登录)
8、asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
9、asp.net中的窗体身份验证(不同的角色访问不同的目录)
10、asp.net中的窗体身份验证(验证HTML文件)
11、asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)
本例中用到的源代码只是将《asp.net中的窗体身份验证(最简单篇)》中的源代码进行了修改,有兴趣的朋友也可以在http://www.aspxfans.com/myBlogFile/窗体身份验证:验证HTML文件.rar或http://download.csdn.net/source/1970237来下来。